多重继承
继承是面向对象编程的一个重要方式,通过继承,子类可以扩展父类的功能。
在python中,可以通过多重继承,一个子类同时获得多个父类的所有功能:
# 动物大类
class Animal(object):
pass
# 地走类
class Runnable(object):
pass
# 飞行类
class Flyable(object):
pass
# Dog和Bat多重继承
class Dog(Animal, Runnable):
pass
class Bat(Animal, Flyable):
pass
MixIn
在设计类的继承关系时,主线都是单一继承下来的。但若"混入"额外的功能,通过多重继承实现,这种设计通常称之为MinIn。
为了更好的看出继承关系,将Runnable
和Flyable
改为RunnableMinIn
和FlyableMinIn
class Dog(Animal, RunnableMinIn):
pass
MinIn的目的就是给一个类增加多个功能,优先考虑通过多重继承来组合多个MinIn功能,而不是设计多层次的复杂的继承关系。
定制类
class Student(object):
def __init(self, name):
self.__name = name
# 1. __str__,自定义打印实例显示的值
def __str__(self):
return 'Studen object (name: %s)' % self.__name
# 2. __iter__ 可将一个类被用于for...in循环,__iter__返回一个迭代对象,__next__方法拿到循环的下一个值,知道遇到StopIteration错误时退出循环。
def __iter__(self):
return self # 实例本身就是迭代对象,返回自己即可
def __next__(self):
return self
# 3.__getitem__像list那样按照下表取出元素(切片等函数体见廖雪峰老师的定制类__getitem__)
def __getitem__(self, n):
a, b = 1, 1
for x in range(n):
a, b = b, a + b
return a
# 4.__getattr__动态返回一个属性
def __getattr__(self, attr):
if attr == 'score'
return 99
# 5.__call__一个对象实例可以有自己的属性和方法,当我们调用实例方法时,我们用instance.method()来调用。定义一个__call__方法,就可以i直接对实例进行调用
def __call__(self):
print('My name is %s.' % self.__name)
# 通过callable()函数,可以判断一个对象是否是'可调用'对象
网友评论