目录
继承
单继承
以下其实是单继承。
#先定义一个父类
class A():
#初始化
def __init__(self):
self.num=10
#自定义方法
def info_print(self):
print(f'父类的属性self.num={self.num}')
#子类继承父类
class B(A):
pass
#创建对象
sun1=B()
# 子类成功继承父类
print(sun1.num)
sun1.info_print()
运行结果如下:
10
父类的属性self.num=10
Process finished with exit code 0
多继承
继承的两个父类有同名的方法或属性的话,优先选择最近的一个。
class Master():
#多继承的话,相当于是他有多个父类,但是如果父类中有自定义函数重名的话,
# 它会优先取第一个,比如classB(A,C),重名的部分就会继承A
def __init__(self):
self.kongfu='[古法煎饼果子配方]'
def make_cake(self):
print(f'运用{self.kongfu}只做煎饼果子')
class School():
def __init__(self):
self.kongfu='[山东煎饼果子配方]'
def make_cake(self):
print(f"运用{self.kongfu}制作煎饼果子")
class pretice(Master,School):
pass
stu=pretice()#这个的话就是子承父业,但是自己有积累了一些东西,按最近来分(仅是在同名情况下)
print(stu.kongfu)
stu.make_cake()
结果如下:
[古法煎饼果子配方]
运用[古法煎饼果子配方]只做煎饼果子
子类重写父类的属性和方法
重写父类的属性和方法之后,再输出的话就是子类的属性和方法
class Master():
#多继承的话,相当于是他有多个父类,但是如果父类中有自定义函数重名的话,
# 它会优先取第一个,比如classB(A,C),重名的部分就会继承A
def __init__(self):
self.kongfu='[古法煎饼果子配方]'
def make_cake(self):
print(f'运用{self.kongfu}只做煎饼果子')
class School():
def __init__(self):
self.kongfu='[山东煎饼果子配方]'
def make_cake(self):
print(f"运用{self.kongfu}制作煎饼果子")
class pretice(Master,School):
def __init__(self):
self.kongfu='[独创]'
def make_cake(self):
print(f'运用{self.kongfu}制作煎饼果子')
stu=pretice()#这个的话就是子承父业,但是自己有积累了一些东西,按最近来分(仅是在同名情况下)
print(stu.kongfu)
stu.make_cake()
结果如下:
[独创]
运用[独创]制作煎饼果子
继承的层级关系mro
那上面代码举例
print(pretice.mro())
结果如下
#反应继承关系,由左到右,由近及远[<class '__main__.pretice'>, <class '__main__.Master'>, <class '__main__.School'>, <class 'object'>]
子类调用父类的同名属性和方法1
父类初始化
# 就是创建子类后,更改子类的属性值,但仍想调用父类,该如何做?方法一:
class Master():# #多继承的话,相当于是他有多个父类,但是如果父类中有重名的话,它会优先取第一个,比如classB(A,C),重名的部分就会继承A
def __init__(self):
self.kongfu='[古法煎饼果子配方]'
def make_cake(self):
print(f'运用{self.kongfu}只做煎饼果子')
class pretice(Master):
def __init__(self):
self.kongfu='[独创]'
def make_cake(self):
print(f'运用{self.kongfu}制作煎饼果子')
def make_oldcake(self):#要原先父类的方法
Master.__init__(self)#父类初始化,主要是这句话
#调用父类中make.cake方法
Master.make_cake(self)
stu=pretice()
stu.make_cake()
stu.make_oldcake()
结果如下
运用[独创]制作煎饼果子
运用[古法煎饼果子配方]只做煎饼果子
子类调用父类重名的属性和方法二
super()来调用父类方法
#就是创建子类偶,更改子类的属性值,但仍想调用父类,该如何做?方法二:
#两者的本质在于当涉及到多继承问题时,公共父类会重复调用,造成资源的浪费,而此方法则只会调用一次,但是多了一个school的时候就会不知道该用那个
class Master():# #多继承的话,相当于是他有多个父类,但是如果父类中有重名的话,它会优先取第一个,比如classB(A,C),重名的部分就会继承A
def __init__(self):
self.kongfu='[古法煎饼果子配方]'
def make_cake(self):
print(f'运用{self.kongfu}只做煎饼果子')
class pretice(Master):
def __init__(self):
self.kongfu='[独创]'
def make_cake(self):
print(f'运用{self.kongfu}制作煎饼果子')
def make_oldcake(self):#要原先父类的方法
super().__init__()#父类初始化
#调用父类中make.cake方法
super().make_cake()
stu=pretice()
stu.make_cake()
stu.make_oldcake()
结果如下
运用[独创]制作煎饼果子
运用[古法煎饼果子配方]只做煎饼果子
多继承
# 又继承给一个徒弟,能继承父类中所有的方法
class Master():
def __init__(self):
self.kongfu='[古法煎饼果子配方]'
self.name='老师傅'
def make_cake(self):
print(f'运用{self.kongfu}只做煎饼果子')
class School():
def __init__(self):
self.kongfu='[山东煎饼果子配方]'
def make_cake(self):
print(f"运用{self.kongfu}制作煎饼果子")
class pretice(Master,School):
def __init__(self):
self.kongfu='[独创]'
def make_cake(self):
print(f'运用{self.kongfu}制作煎饼果子')
def make_oldcake(self):#要原先父类的方法
Master.__init__(self) # 父类初始化
#调用父类中make.cake方法
Master.make_cake(self)
#要原先父类的方法
def make_school(self):
School.__init__(self)
School.make_cake(self)
class new(pretice):
pass
new=pretice()
new.make_cake()
new.make_oldcake()
new.make_school()
print(new.name)#没有重名的时候可以随意调用,但有时候需要修改它的值,也就是新创,这时候调用老值就需要此方法了。
结果如下:
运用[独创]制作煎饼果子
运用[古法煎饼果子配方]只做煎饼果子
运用[山东煎饼果子配方]制作煎饼果子
老师傅
私有属性和私有方法
设置需要在定义的属性和方法前加上两个下划线
class Master():
def __init__(self):
self.kongfu='[古法煎饼果子配方]'
self.__money=20000#私有属性
def make_cake(self):
print(f'运用{self.kongfu}只做煎饼果子')
class pretice(Master):
def __init__(self):
self.kongfu='[独创]'
def make_cake(self):
print(f'运用{self.kongfu}制作煎饼果子')
def make_oldcake(self):#要原先父类的方法
Master.__init__(self)#父类初始化
#调用父类中make.cake方法
Master.make_cake(self)
stu=pretice()
print(stu.__money)#私有属性
stu.make_oldcake()
结果的话,会报错的,也就是说私有属性不能调用。
获取和修改私有属性
定义函数名get__XX和set__XX来获取和修改私有属性
####这个类里面的方法都是实例方法
class Master():
def __init__(self):
self.kongfu='[古法煎饼果子配方]'
self.__money=20000#私有属性
def make_cake(self):
print(f'运用{self.kongfu}只做煎饼果子')
def get_money(self):
return self.__money#吧私有属性返回出去
def set_money(self,money):
self.__money=money
class pretice(Master):
pass
stu=pretice()
a=stu.get_money()
print(a)
stu.set_money(50)
a=stu.get_money()
print(a)
结果如下
20000
50