面向对象的三大特征(封装、继承、多态)
封装:隐藏对象的属性和实现细节,只对外提供必要的方法,相当于将“细节封装起来”,只对外暴露“相关的调用方法”。封装可以通过“私有属性、私有方法”的方式,实现封装。
继承:继承可以让子类具有父类的特性,提高了代码的复用性。继承从设计上是一个增量进化,原有父类设计不变的情况下,可以增加新的功能,或者改进已有的算法。
多态:指同一个方法调用由于对象的不同会产生不同的行为。
继承
继承是面向对象程序设计的重要特征,也是实现“代码复用”的重要手段。如果一个新类继承自一个设计好的类,就直接具备了已有类的特征,会大大降低工作难度。已有的类,我们称为“父类或者基类”,新的类,我们称为“子类或者派生类”。
语法格式
Python支持多重继承,一个子类可以继承多个父类。继承的语法格式如下:
class 子类类名(父类1[,父类2,...])
类体
如果在类定义中没有指定父类,默认父类是object类,也就是说,object是所有类的父类,里面定义了一些所有类共有的默认实现,如:__new__()。
定义子类时,必须在其构造函数中调用父类的构造函数。调用格式如下:
父类名.__init__(self,参数列表)
[Python] 纯文本查看 复制代码 class Person:
def say_age(self):
print('不知道')
class Student(Person):#子类中为空
pass
s = Student()
s.say_age()
运行结果为:不知道
从上面一个简单地例子来看,子类Student已经继承了父类Person,并且可以自由调用方法。
[Python] 纯文本查看 复制代码 class Person:
def __init__(self,name,age):
self.name = name
self.__age = age #私有属性
def say_age(self):
print('不知道')
class Student(Person):
def __init__(self,name,age,score):
Person.__init__(self,name,age) #引用中形参是子类中的形参,不是父类中的。而且必须显式的调用,不然解释器不会调用
self.score = score
s = Student('cys',18,100)
s.say_age()
print(s.name)
print(s._Person__age)
运行结果为:不知道
cys
18
从上面代码中可以看出,继承成功后子类一样可以调用父类中的属性,私有属性继承后相当于子类的私有属性,需要使用调用私有属性的方法调用。 |