day22_类常用装饰器

目录

    1、@property

    2、@abc.abstractmethod

    3、@classmethod

    4、@staticmethod

    # 1  @property
    # 使得对象调用方法时,不用加括号
    class Foo:
        @property
        def f1(self):
            print('你又偷看我')
    foo = Foo()
    foo.f1  # 不用加括号即可调用方法,就像调用一般的数据属性一样
    '''
    你又偷看我'''
    
    # 2  @abc.abstractmethod
    # 抽象类的实现,需要导入模块abc
    import abc  # 导入abc模块
    class Foo(metaclass=abc.ABCMeta):  #参数固定写法
        @abc.abstractmethod  
        def func(self):
            print('小崽子们,照着我的名字来!')
    	
    	def func2(self):
            print('不需要复制我的名字!')
            
    	name = '我不是方法,不能成为抽象类的标准属性'
    
    # 不按照抽象类标准方法定义   
    class Boo(Foo):
        def m1(self):
            print('你能看到我的时候,你就成功了')
    
    # 按照抽象类标准方法定义
    class Boo2(Foo):
        def func(self):
            super().func()  # 基于继承背景下,对象属性的的重用
            print('好的,按照你的名字来,大佬!')
    	def m1(self):
            print('你能看到我的时候,你就成功了')
    
    # 实例化之前,定义阶段,不会报错
    
    # 实例化类Boo
    # 实例化的时候就报错:TypeError: Can't instantiate abstract class Boo with abstract methods func
    boo = Boo()  
    boo.m1()
    
    # 实例化Boo2
    boo2 = Boo2()
    boo2.m1()
    boo2.func()
    '''
    你能看到我的时候,你就成功了
    小崽子们,照着我的名字来!
    好的,按照你的名字来,大佬!'''
    
    # 3  @classmethod
    # 使得方法成为类的绑定方法,即该方法的第一个参数只能绑定为一个类,该方法中只能访问这个类的共有属性,不能访问对象的独立属性
    class Foo:
        x = 10
        @classmethod
        def func(cls):
            print(cls)
            print(cls.x)
            
    foo = Foo()
    foo.func()  # 使用对象调用类绑定方法时,会将对象所属的类传入func
    Foo.func()
    '''
    <class '__main__.Foo'>
    10
    <class '__main__.Foo'>
    10'''
    
    # 4  @staticmethod
    # 使得方法成为非绑定方法,即成为一个普通属性,类和对象都能直接调用
    class Foo:
        def __init__(self,name,age):
            self.name = name
            self.age = age
            
    	@staticmethod
        def tell_something():
            print('''你们都不能绑定我,哈哈''')
    foo = Foo('alex',18)
    foo.tell_something()
    Foo.tell_something()
    '''
    你们都不能绑定我,哈哈
    你们都不能绑定我,哈哈'''
    
    posted @ 2019-10-12 21:11  W文敏W  阅读(69)  评论(0编辑  收藏  举报