继承
- 简单的继承
class Employee(object):
def __init__(self,name,job,pay):
self._name = name
self._job = job
self._pay = pay
def giveRaise(self,percent):
self._pay = int(self._pay*(1+percent))
def __str__(self):
return "[Employee:%s,%s,%s]"%(self._name,self._job,self._pay)
class Manager(Employee):
def __init__(self,name,pay):
Employee.__init__(self,name,'mgr',pay)
def giveRaise(self,percent,bonus=.10):
Employee.giveRaise(self,percent+bonus)
- 多重继承
class A(object):
a,b = 1,1
class B(A):
a = 2
class C(A):
a,b,c = 3,3,3
class D(B,C):
pass
#A为经典类时,继承方法的解析顺序为:深度优先A优先于C
#A为新式类时,继承方法的解析顺序为:广度优先,即B-C-A
- 方法调用 super
super的用途:
①避免父类的重复调用;
②super是一个类,不是函数
③单一继承直接父类调用,多重继承super调用
super(D,self).test
class A(object):
def test(self):
print ("A's test")
class B(A):
def test(self):
super(B,self).test()
class C(A):
def test(self):
super(C,self).test()
class D(B,C):
pass
组合:将以前的类进行组合
用已有类生成新类
与继承的区别: has a 和 is a的区别
class Employee(object):
def __init__(self,name,job,pay):
self._name = name
self._job = job
self._pay = pay
def giveRaise(self,percent):
self._pay = int(self._pay*(1+percent))
def __str__(self):
return "[Employee:%s,%s,%s]"%(self._name,self._job,self._pay)
class Manager(Employee):
def __init__(self,name,pay):
Employee.__init__(self,name,'mgr',pay)
def giveRaise(self,percent,bonus=.10):
Employee.giveRaise(self,percent+bonus)
calss Department(object):
def__init__(self,*args):
self.members = list(args)
def addMembers(self,person):
self.members.append(person)
def showAll(self):
for person in self.members:
print(person)
def giveRaise(self,percent):
for person in self.members:
person.giveRaise(percent)
# a = Employee('xix','alg_engineer',10000)
# b = Employee('xixi','engineer',11000)
# c = Manager('xi','engineer',90000)
# d = Department(a,b,c)
#d.show()
#d.giveRaise(0.1)