# coding:utf-8
class Father(object):
def __init__(self, name, sex):
self.name = name
self.sex = sex
# 说话
def talk(self):
return f'{self.name}会说话'
# 性别判断
def is_sex(self):
if self.sex == 'man':
return f'{self.name}是男的'
else:
return f'{self.name}是女的'
class Son01(Father):
def play_football(self):
return f'{self.name}会踢足球'
class Son02(Father):
def play_basketball(self):
return f'{self.name}会打篮球'
son01 = Son01("梨花", "girl")
print(son01.is_sex(), son01.play_football(), son01.talk())
son02 = Son02("海棠", "man")
print(son02.is_sex(), son02.play_basketball(), son02.talk())
# 继承
# 在编程中继承的关系是类与类的一种关系
# 当我们定义了一个新的 类 时,可以从当前存在的 类 通过继承的关系得到其功能、属性等;
# 被继承的 类 我们就叫做父类(也可以叫做基类或者超类),而新的 类 则叫做子类,且其具备父类的功能、属性与一些特性。
# 多态:虽然有相同的功能,但是表现出了多种的状态,联想到类,虽然通过继承拥有了相同的函数,但是执行的结果不尽相同,这就是类的多态;
# 子类继承了父类的函数,如何才能让子类的父函数拥有自己的状态?那就是在子类中重写父类的方法
class XiaoMingFather(object):
def talk(self):
print("小明爸爸发表了自己的观点")
class XiaoMingBrother(XiaoMingFather):
def talk(self):
print("小明哥哥不同意爸爸的观点并发表了自己的观点")
class XiaoMing(XiaoMingFather):
def talk(self):
print("小明不同意爸爸的观点,也不同意哥哥的观点")
f = XiaoMingFather()
f.talk()
b = XiaoMingBrother()
b.talk()
x = XiaoMing()
x.talk()
# super()函数作用,在python中,子类继承父类的方法使用的关键字,当子类继承父类后,就可以完全使用父类的方法了;Python 3.x 版本中super()里无参数
class Animal(object):
def __init__(self):
print('动物会吃饭')
class Dog(Animal):
def __init__(self):
print("狗子会吃零食")
super().__init__()
dog = Dog()
# 多重继承:class Son(Father01, Father02, Father03... )
# >>> 将被继承的多个父类放入子类小括号的参数位,每个父类使用逗号隔开
# >>> 继承顺序,从左向右依次继承的;继承的多个父类中存在相同函数时,是按照顺序从左向右依次继承,其中最左侧的类中的函数才会发生作用。
class Father01(object):
def play_game(self):
print('爸爸喜欢打游戏')
def like(self):
print('爸爸喜欢建设')
class Mother01(object):
def buy(self):
print('妈妈喜欢淘宝购物')
def like(self):
print('妈妈喜欢瑜伽')
class Son01(Father01, Mother01):
def play(self):
print('儿子喜欢打球')
s = Son01()
s.play_game()
s.like()
# 拓展:如何查看类的继承顺序
# 内置函数: __mro__