你能强制从 bass 类派生类在 python 中定义特定的成员变量吗?

Can you force derived class from a bass class to define specific member variables in python?

提问人:user21113865 提问时间:5/3/2023 更新时间:5/3/2023 访问量:22

问:

如果我有一个班级,请说:

class BaseClassOnly():
    def __init__(self):
        self._foo = None

    def do_stuff(self):
        print("doing stuff with foo" + self._foo)

我想强制所有从 BaseClassOnly 派生的类为“self._foo”提供一个值,以便继承的函数 do_stuff() 能够使用它。有没有办法确保如果从 BaseClassOnly 继承的类在 init() 中未设置变量 self._foo 会导致错误?

Python 继承 python 类 abstract-base-class

评论

2赞 juanpa.arrivillaga 5/3/2023
我认为这很难做到,因为如果不对类代码进行反省,就没有办法。强迫人们实现一种方法要容易得多,或者,那么它是微不足道的,而不会陷入太多的黑魔法__init__property
1赞 juanpa.arrivillaga 5/3/2023
但一般来说,你只需为类的使用者记录这一点
0赞 Frank Yellin 5/3/2023
抽象基类可以强制子类实现方法。这通常被认为比强制子类实现字段更简洁。

答:

0赞 Barmar 5/3/2023 #1

如果假设子类将调用基类的 ,则可以使用 来检查。__init__()hasattr()

class BaseClassOnly():
    def __init__(self):
        if not hasattr(self, '_foo'):
            raise ValueError('self._foo must be defined')