2022.08.15 DAY31
面向对象三大特征
封装
- 隐藏对象的属性和实现方法,只对外提供必要的方法。
继承
-
继承可以让子类具有父类的特性,提高代码的重用性
-
子类继承父类(基类)
-
python支持多重继承,一个子类可以继承多个父类。
-
语法格式:
class 子类类名(父类1[, 父类2, ...]): 类体
-
如果在类定义中没有指定父类,则默认父类为object类。也就是说,object是所有类的父类,里面定义了所有类的公有的默认实现,比如:_new_()。
-
定义子类时,必须在其构造函数中调用父类的构造函数。调用格式如下:
父类名.__init__(self, 参数列表)
实例:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def get_info(self):
print(self.name, "的年龄为:", self.age)
class Student(Person):
def __init__(self, name, age, score):
Person.__init__(self, name, age) # 必须显式调用父类的初始化方法,不然解释器不会去调用
self.score = score
def get_info(self):
print(self.name, "的年龄为:", self.age, "分数为:", self.score)
def test():
s = Student("YJP", 21, 149)
s.get_info()
print(dir(s))
if __name__ == "__main__":
test()
运行结果:
YJP 的年龄为: 21 分数为: 149
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'age', 'get_info', 'name', 'score']
- 成员继承:子类继承了父类除构造方法之外的所有成员。
- 方法重写:子类可以重新定义父类中的方法,这样就会覆盖父类的方法,也称为重写。
重写案列:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def introduce_name(self):
print("我的名字为:", self.name)
def introduce_age(self):
print("我的年龄为:{0}".format(self.age))
class Student(Person):
def __init__(self, name, age, score):
Person.__init__(self, name, age) # 必须显式调用父类的初始化方法,不然解释器不会去调用
self.score = score
def introduce_name(self):
""" 重写父类的方法 """
print("大家好,我的名字为:", self.name)
def introduce_age(self):
""" 重写父类的方法 """
print("大家好,我的年龄为:{0}".format(self.age))
def test():
s = Student("YJP", 21, 149)
s.introduce_name()
s.introduce_age()
if __name__ == "__main__":
test()
运行结果:
大家好,我的名字为: YJP
大家好,我的年龄为:21