Python高级培训第二次作业

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)

经验分享 程序员 微信小程序 职场和发展