Python的继承:
class DerivedClassName(BaseClassName):
......
当出现子类想要在父类的某一方法的基础上增添功能的话,可以采用下面的技术实现:
①调用未绑定的父类方法
②使用super()函数。在多重继承时,不用给定任何基类的名字,会自动一层层找出所有基类对应的方法。当想改变类的继承关系的时候只需要修改()里类的名字就可以了,而不用再去改super()的内容。
import random
class Fish:
def __init__(self):
self.x = random.randint(0, 10)
self.y = random.randint(0, 10)
def move(self):
self.x -= 1
print("我的位置是:", self.x, self.y)
class GoldFish(Fish):
pass
class Sharp(Fish):
def __init__(self):
#解决方法①Fish.__init__(self) 里面的self是子类的实例对象
#解决方法②super().__init__() super().需要父类的方法,会自动传入对象参数
self.hungry = True
def eat(self):
if self.hungry:
print("吃吃吃")
self.hungry = False
else:
print("饱了")
>>> goldFish = GoldFish()
>>> goldFish.move()
我的位置是: 1 6
>>> sharp = Sharp()
>>> sharp.eat()
吃吃吃
>>> sharp.move() #调用move()方法出错,原因是Sharp子类覆盖了父类的构造函数,导致没有定义x变量
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
sharp.move()
File "E:/1程序/python/类与对象.py", line 9, in move
self.x -= 1
AttributeError: 'Sharp' object has no attribute 'x'
Python也支持多重继承
多重继承:
class DerivedClassName(Base1, Base2, Base3):
......
组合:把类的实例化放到新类中
class Tutle:
def __init__(self, x):
self.num = x
class Pool:
def __init__(self, x):
self.tutle = Tutle(x) #组合
def print_num(self):
print('池塘里有乌龟%d只' % self.tutle.num)