python 类装饰器和继承

来源:互联网 发布:八爪鱼软件的作用 编辑:程序博客网 时间:2024/06/03 16:43

类装饰器:

被装饰器装饰的类的方法和属性集合,是装饰器中的方法和属性集合    的子集

例子一:

def myc(myclass):
    class InnerClass:
        def __init__(self,x,y,z):
            self.z=z
            self.x=x
            self.y=y

            self.a=myclass(self.x,self.y)
        def pr(self,g):
            self.a.pr(g)   #注意这里不是self.a.pr(self,g)
            print(self.z)
    return InnerClass
@myc
class B:
    def __init__(self,x,y):
        self.x=x
        self.y=y

        #A.__init__(self,x,y)
        #self.r=r
    def pr(self,g):
        t=self.x+self.y+g
        print(t)
b=B(1,9,4)
b.pr(6)

例子二:

def myc(myclass):
    class InnerClass:
        def __init__(self,x=9,y,z=8):  #改 x=9为 x    报错:SyntaxError: non-default argument follows default argument

         #终于明白了为什么报错:就是说我把含有默认值的参数放在了不含默认值的参数的前面,这样问题就好解决     了,调换一下参数的位置就好了
            self.z=z
            self.x=x
            self.y=y

            self.a=myclass(self.x,self.y)
        def pr(self,g):
            self.a.pr(g)
            print(self.z)
    return InnerClass
@myc
class B:
    def __init__(self,x,y):
        self.x=x
        self.y=y
        #A.__init__(self,x,y)
        #self.r=r
    def pr(self,g):
        t=self.x+self.y+g
        print(t)
    def pf(self,f):
        print(f)

b=B(1,2)
b.pr(6)

b.pf(2)      #报错:AttributeError: 'InnerClass' object has no attribute 'pf', 调用被装饰类中有的方法,但装饰器中不存在方法会报错       这就是为什么        被装饰类方法属性  要    包含于装饰器的方法属性中

类继承:

父类的方法和属性   包含于  子类中和方法和属性  子集

class InnerClas:
    def __init__(self,x,y,z):
        self.z=z
        self.x=x
        self.y=y

    def pl(self):
        print(self.z)
class B(InnerClas):
    def __init__(self,x,y,z,f):
       
self.x=x
        self.y=y
        self.z=z 
                  #子类继承了父类的方法和属性        需在子类的命名空间也把他们添加上

        self.f=f
        #A.__init__(self,x,y)
        #self.r=r
    def pr(self,r):
        t=self.x+self.y+r+self.f
        print(t)
       
self.pl()    #继承父类之后,调用父类方法,相当于调用子类自身的方法一样

                       #错误写法:InnerClas.pl(self)   self.pl(self)
b=B(1,9,4,9)
b.pr(8)



原创粉丝点击