import operator
class Cat(object):#创建类cat 继承与object
def __init__(self,leg):#设置__init__就上一个参数leg
self.leg = leg#设置leg的值为leg
def run(self):#设置方法 获得奔跑方法
print("cat have no way to run")#打印cat have no way to run
class Tiger(Cat):#创建类Tiger 继承与Cat
def __init__(self,leg,name):#设置__init__有两个参数leg,name
self.name=name#设置name的值为name
Cat.__init__(self,leg)#重新使用下Cat的__init__()
def run(self):#重写奔跑方法
super(Tiger, self).run()#重写使用Cat的run()
print("tiger konw how to run")#打印"tiger konw how to run"
#print(self.leg)
def __pow__(self, power, modulo=None):#重写pow方法 返还pow(self.leg,power)
a=int(self.leg)
#print(type(power))
for i in range(power):
a=a*power
return a
def __lt__(self, other):#重写__lt__ 比较大小
if self.leg>other.leg:
return True
else:
return False
#c1 = Cat(4)
c2=Tiger(leg=4,name="tiger")#实例化Tiger为变量c2 leg=4,name="tiger"
c2.run()#使用c2的run方法
print(pow(c2,4))#打印出pow(c2,4)
c3=Tiger(leg=5,name="tiger2")#实例化Tiger为变量c3 leg=5,name="tiger2"
print(operator.lt(c3, c2))#打印出lt(c3, c2) 的结果
property()
property(fget=None,fset=None,fdel1=None,doc=None) property 封装
property(获得属性的方法,设置属性的方法,删除属性的方法)
class Myclass():
def __init__(self,attr = 10):
self.myattr = attr
def getoneattr(self):
return self.myattr
def setoneattr(self,attr):
self.myattr = attr
def deloneattr(self):
del self.attr
x=property(getoneattr,setoneattr,deloneattr)
c1 = Myclass()
c1.getoneattr()#--------------------------------<=10
c1.x#---------------------------------------------<=10
c1.x=20
c1.x#----------------------------------------------<=20
del c1.x
c1.myattr#------------------------------------------<=报错
super()
super([子class],self).方法([,attr])#不能加self
Python中子类可以覆盖父类的方法
要想重新调用被覆盖的父类的方法可以用super()调用父类的方法
super()在改变子类的魔法函数时显得尤其的重要
后加:
def __init__(self):
super(base_class_name,self).__init__()
self.wuhu=1
可以既继承父类 又可以设计子类的__init__ 这里子类的self.wuhu被创建了
当然不用非要用__init__
例如
class Father():
def __init__(self):
print('父类')
self.wuhu1=1
def fun1(self,x=1):
self.wuhu2=self.wuhu1+x
print('wuhu2=',self.wuhu2)
class Child(Father):
def __init__(self):
print('子类')
super(Child,self).__init__()
def fun1(self):
super(Child,self).fun1()
self.wuhu3=self.wuhu2+self.wuhu1
c1=Child()
c1.fun1()
print(c1.wuhu3)
结果为:
子类
父类
wuhu2= 2
3
class Father():
def __init__(self):
print('父类被调用')
class Child(Father):
def __init__(self):
print('子类被调用')
super(Child,self).__init__()#------------------<=这里不能加self
c1 = Child()#----------------------------------------<=父类被调用
子类被调用
改写魔法方法:
例(add):
class Model:
def __init__(self,x):
self.x=x
def __add__(self, other):
return Model(self.x+other.x)
def __str__(self):
return ("两个对象相加的值是{x}".format(x=self.x))
a=Model(5)
b=Model(7)
print(a+b)