10.10 实例属性的更改
10.10.1 在类的外部做实例属性的修改
class DogInfo(object):
def __init__(self,leg):
#初始化操作,定义的是属性,实例属性
self.leg = leg
def bark(self):
#在方法中调用实例属性
print(self.leg)
print('狗会叫')
def showleg(self):
print('这条狗的腿有',self.leg,'条')
def __str__(self):
return '狗'
dog = DogInfo(4)
print('更改之前的实例属性',dog.leg)
print('做完移植')
dog.leg = 5
print('更改之后的实例属性',dog.leg)
dog.showleg()
展示
更改之前的实例属性 4
做完移植
更改之后的实例属性 5
这条狗的腿有 5 条
10.10.2 在类的内部做修改
class DogInfo(object):
def __init__(self,leg):
#初始化操作,定义的是属性,实例属性
self.leg = leg
def bark(self):
#在方法中调用实例属性
print(self.leg)
print('狗会叫')
def change_leg(self,newleg):
self.leg = newleg
def showleg(self):
print('这条狗的腿有',self.leg,'条')
def __str__(self):
return '狗'
dog = DogInfo(4)
print('更改之前的实例属性',dog.leg)
print('做完移植')
dog.change_leg(5)
print('更改之后的实例属性',dog.leg)
dog.showleg()
展示:
更改之前的实例属性 4
做完移植
更改之后的实例属性 5
这条狗的腿有 5 条
10.11 继承
10.11.1 继承
class ChickenSoup(object):
'''祖传鸡汤(爷爷的秘方)'''
def __init__(self):
self.name = '祖传鸡汤'
def cook(self):
print('做法:田园鸡500g 大料 40g 盐10g')
class NewChickenSoup(ChickenSoup):
'''爷爷传给父亲的,父亲的秘方'''
def __init__(self):
self.name = '祖传鸡汤2.0版本'
pass
new = NewChickenSoup()
new.cook()
print('鸡汤的名字',new.name)
注意点:
1、继承关系中,子类继承父类的方法与属性
即:子类可以使用父类的属性和方法
2、如果子类的方法与父类是同名的,使用子类自己的属性
3、如果子类已经有自己的__int__这个方法,没有特殊操作,不能直接调用父类的属性
10.11.2 多继承
class NewChickenSoup(ChickenSoup,NewEast):
'''爷爷传给父亲的,父亲的秘方'''
def __init__(self):
super(NewChickenSoup, self).__init__()
self.name1 = '祖传鸡汤2.0版本'
pass
注意点:
当前类继承于多个类,多个类写在括号中
10.11.3 多层继承
class NewEast(object):
def bbq(self):
print('烧烤秘方')
def birdsoup(self):
print('鸽子汤')
class NewChickenSoup(ChickenSoup,NewEast):
'''爷爷传给父亲的,父亲的秘方'''
def __init__(self):
super(NewChickenSoup, self).__init__()
self.name1 = '祖传鸡汤2.0版本'
pass
NewChickenSoup -------> NewEast -------> object
父类---子类 基类---派生类
10.11.4 查找顺序
print(NewChickenSoup.__mro__)
(<class '__main__.NewChickenSoup'>, <class '__main__.ChickenSoup'>, <class '__main__.NewEast'>, <class 'object'>)
注意点:
多继承的查找顺序与继承的类的位置有关系
10.11.5 继承的权限问题
在继承的时候,有些属性和方法,不想被子类所继承,设置权限
私有属性与私有方法
class NewEast(object):
def __init__(self):
self.__money = '2亿'
def bbq(self):
print('烧烤秘方')
def birdsoup(self):
print('鸽子汤')
class NewChickenSoup(NewEast):
def cook(self):
print('做法:田园鸡500g 大料 40g 盐10g 孜然50g')
new = NewChickenSoup()
# print(new.money)
新东方=NewEast()
print(新东方.__money)
注意点:
1、私有属性:__属性名,不能被子类所调用,在类的外面,也不能被自己的实例所调用
2、但是私有属性可以在类的内部调用
保护属性与保护方法
class NewEast(object):
def __init__(self):
self.__money = '2亿'
self._golden = '2斤'
self.name = '新东方绝技'
def _bbq(self):
print('烧烤秘方')
print('最赚钱',self.__money)
def birdsoup(self):
print('鸽子汤')
10.11.6 重写与调用父类的方法
class NewEast(object):
def cook(self):
print('鸽子汤')
class NewChickenSoup(NewEast):
def cook(self):
print('做法:田园鸡500g 大料 40g 盐10g 孜然50g')
class NewEast(object):
def cook(self):
print('鸽子汤')
def cook1(self):
print('鸽子汤')
class NewChickenSoup(NewEast):
def cook(self):
super(NewChickenSoup, self).cook()
super().cook()
NewEast.cook(self)
print('做法:田园鸡500g 大料 40g 盐10g 孜然50g')
new = NewChickenSoup()
new.cook()