Python中的基类变量值

2024-10-01 05:02:59 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我想创建一个基类,其他类将从中继承,但永远不会使用类变量,我应该将类变量设置为什么?你知道吗

例如:

class Spam:
    time_to_cook = None

    def eat(self):
        ...

class SpamWithEggs(Spam):
    time_to_cook = Minutes(5)

    def eat(self):
        ...

所有子类都有自己的time_to_cook,因此它在Spam中的值对程序的功能没有影响。你知道吗

class Spam:
    time_to_cook = None

在我看来不错,但是它没有给出任何关于time_to_cook类型的信息。所以我倾向于

class Spam:
    time_to_cook = Minutes(0)

但这可能会给人一种误导性的印象,即time_to_cook的值实际上是被使用的。你知道吗

我也在考虑完全忽略它,而是在docstring中提到它。你知道吗


Tags: toself程序nonetimedefspam基类
2条回答

我喜欢shavenwarthog的答案,但是直接使用异常作为属性的值有点奇怪。因此,您可以将引发错误的内容传递给它,无论您调用什么方法:

class Complainer:
    def __getattr__(self, name):
        raise NotImplementedError 

像这样使用:

class Spam(object):
    time_to_cook = Complainer()

然后,无论何时尝试调用Minute的任何方法,都会得到一个异常。或者,如果您永远不会直接实例化Spam,您可以只make it entirely abstract,而不用担心它。你知道吗

我建议不要执行错误。它没有给出任何关于类型应该是什么的提示,但是很明显,不应该直接使用该值。你知道吗

class Spam(object):
    time_to_cook = NotImplementedError

    def eat(self):
        ...

class SpamWithEggs(Spam):
    time_to_cook = Minutes(5)

相关问题 更多 >