Python装饰器和抽象基类

装饰器

"""
装饰器,既然称为装饰器,肯定会起到装饰的作用,即可以快速、简便地修改某种事物(这里指函数)的特性。
@classmethod装饰的函数为类方法,类方法可以使类名直接调用,也可以用实例名调用。。
@staticmethod装饰的函数为静态方法(类似普通函数,不需要传递实例属性、方法),静态方法可以通过
类名或实例名调用。
实例方法必须实例化才能调用。使用类方法和静态方法可以把属于类的函数都定义在类里面,使得函数的命名
空间简洁。
@property把方法装饰为属性,采用调用属性的形式调用,即不用加括号。
"""

class Animal:
    def name(self):
        print("Bob")

    @classmethod
    def kind(cls):
        print("cat")

    @staticmethod
    def color():
        print("yellow")
    
    @property
    def price(self):
        print("expensive")

Animal().name() # 实例方法必须实例化才能调用,需要传递参数self
Animal.kind()
Animal().kind()
Animal.color()
Animal().color()
Animal().price

抽象基类

"""
抽象基类,不能直接被实例化,只能被其他类继承。继承抽象类后其子类必须实现全部抽象方法,否则子类实例化时会触发异常。
抽象基类提供一个框架,通过定义抽象类来限定类中必须含有哪些接口。抽象类只负责管理接口的有无,
接口的具体实现由子类根据自身应用场景灵活实现。

定义抽象方法的两种方式:
通过@abstractmethod装饰函数为抽象方法,子类没有实现抽象方法时,实例化会抛出异常TypeError。
在实例方法中用raise NotImplementedError来定义抽象方法,子类没有实现抽象方法时,实例化不会抛出异常,
调用时才抛出异常NotImplementedError。
"""

from abc import ABC, abstractmethod

class Animal(ABC):    # 定义抽象基类
    @abstractmethod
    def speak(self):  # 抽象方法,必须在子类中实现该方法
        pass

    def eat(self):    # 抽象方法
        raise NotImplementedError('子类必须实现该抽象方法。')

class Dog(Animal):
    def speak(self):
        print('汪汪!')

    def eat(self):
        print('爱吃肉骨头!')

dog = Dog()
dog.speak()
dog.eat()
  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值