zoukankan      html  css  js  c++  java
  • Python学习第二十课——自定property and classmethod

    自定制property

    class Lazyproperty:
        def __init__(self,func):
            # print('==========>',func)
            self.func=func
        def __get__(self, instance, owner):
            print('get')
            # print(instance)
            # print(owner)
            if instance is None:
                return self
            res=self.func(instance)
            setattr(instance,self.func.__name__,res)
            return res
        # def __set__(self, instance, value):
        #     pass
    
    class Room:
        def __init__(self,name,width,length):
            self.name=name
            self.width=width
            self.length=length
        # @property #area=property(area)
        @Lazyproperty  #area=Lazypropery(area)
        def area(self):
            return self.width * self.length
        @property  #test=property(test)
        def area1(self):
            return  self.width * self.length
    # print(Room.__dict__)
    r1=Room('厕所',1,1)
    # print(r1.__dict__)
    
    #实例调用
    # print(r1.area)
    # print(Room.__dict__)
    
    #类调用
    # print(Room.area)
    
    # print(r1.test)
    # print(Room.test)
    # print(r1.area1)
    # print(r1.area1)
    # print(r1.area1)
    # print(r1.area1)
    
    print(r1.area)
    print(r1.__dict__)
    
    print(r1.area)
    print(r1.area)
    print(r1.area)
    print(r1.area)
    print(r1.area)
    print(r1.area)
    print(r1.area)
    print(r1.area)

    自定制classmethod

    class ClassMethod:
        def __init__(self,func):
            self.func=func
        def __get__(self, instance, owner): #类来调用,instance为None,owner为类本身,实例来调用,instance为实例,owner为类本身,
            def feedback(*args,**kwargs):
                print('在这里可以加功能啊...')
                return self.func(owner,*args,**kwargs)
            return feedback
    
    class People:
        name='linhaifeng'
        @ClassMethod # say_hi=ClassMethod(say_hi)
        def say_hi(cls,msg,x):
            print('你好啊,帅哥 %s %s %s' %(cls.name,msg,x))
    
    People.say_hi('你是那偷心的贼',10)
    
    p1=People()
    p1.say_hi('你是那偷心的贼',10)

    自定制元类

    class MyType(type):
        def __init__(self,a,b,c):
            print('元类的构造函数执行')
            # print(a)
            # print(b)
            # print(c)
        def __call__(self, *args, **kwargs):
            # print('=-======>')
            # print(self)
            # print(args,kwargs)
            obj=object.__new__(self) #object.__new__(Foo)-->f1
            self.__init__(obj,*args,**kwargs)  #Foo.__init__(f1,*arg,**kwargs)
            return obj
    class Foo(metaclass=MyType): #Foo=MyType(Foo,'Foo',(),{})---》__init__
        def __init__(self,name):
            self.name=name #f1.name=name
    # print(Foo)
    # f1=Foo('alex')
    # print(f1)
    
    f1=Foo('alex')
    print(f1)
    print(f1.__dict__)
  • 相关阅读:
    Android数据存储之IO
    UVA
    【源代码剖析】tornado-memcached-sessions —— Tornado session 支持的实现(二)
    杀毒与免杀技术具体解释之二:特征码定位-工具及原理
    C++ 訪问控制权限图解
    新辰:传统行业进军互联网 怎样颠覆网络获得新生?
    【二】注入框架RoboGuice使用:(Your First View Injection)
    POJ 1741 Tree 树形DP(分治)
    技术单词
    活动合集 | 2017微软技术暨生态大会 英雄讲师召集令
  • 原文地址:https://www.cnblogs.com/pyhan/p/12326349.html
Copyright © 2011-2022 走看看