繁体   English   中英

使用 __getattr__ dunder 方法实现 abstractmethod

[英]Implement abstractmethod using the __getattr__ dunder method

我有一个实现接口的 class,但我不想显式实现某些方法。
所以我对这些方法使用__getattr__ dunder 方法,但是当我这样做时我收到一个TypeError

TypeError: Can't instantiate abstract class Worm with abstract methods run

示例代码:

from abc import ABCMeta, abstractmethod
class AnimalInterface(metaclass=ABCMeta):
    @abstractmethod
    def eat(self, food):
        ...

    @abstractmethod
    def run(self):
        ...

class Worm(AnimalInterface):
    def eat(self, food):
        pass

    def __getattr__(self, name):
        """this for methods that there is no need to specifically implement them"""
        return lambda *a, **kw: None
Worm()

这完全违反了界面隔离 (SOLID)。 也许重新考虑您的界面设计以使其更加针对客户?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM