- 继承:子类继承父类的属性和方法,如果没有指定父类,则默认父类为 object类
ps:多重继承可以通过mro()来查看类继承的顺序 - 封装:调用父类方法,但是不知道内部细节
class Student:
def __init__(self,name,age):
self.name=name
self.__age=age
def say_age(self):
print('{}的年纪是{}'.format(self.name,self.__age))
class Student1(Student):
def __init__(self,name,age,score):
Student.__init(self,name,age)
#必须显式的调用父类初始化方法,不然解释器不会去调用
self.score=score
s1=Student1('单单',18,100)
s1.say_age
'''继承父类的方法,say_age相当于被封装起来了,调用时只需要在实例变量上直接调用'''
print(s1.name) #继承父类的属性
print(s1._Student__age) #继承父类的私有属性
print(dir(s1)) #可查看对象的所有属性
ps:如果子类重写了父类的方法,则会覆盖父类的方法。
- 多态:不同的子类继承父类的同一种方法时是不同的行为方式
class Man:
def eat(self):
print('吃饭啦……')
class Chinese(Man):
def eat(self):
print('中国人用筷子吃饭')
class English(Man):
def eat(self):
print('英国人用叉子吃饭')
class Indian(Man):
def eat(self):
print('印度人用右手吃饭')
def ManEat(m):
if isinstance(m,Man):
m.eat() #多态
else:
print('不吃饭啦……')
ManEat(Chinese())
ManEat(Indian())
运行结果:
中国人用筷子吃饭
印度人用右手吃饭