0

他のクラスが継承する基本クラスを作成したいが、クラス変数を決して使用しない場合、クラス変数を何に設定すればよいですか?

例えば:

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で言及しています。

4

2 に答える 2

1

私はshavenwarthogの答えが好きですが、例外を属性の値として直接使用するのは少し奇妙です。したがって、代わりに、どのメソッドを呼び出してもエラーが発生する何かを渡すことができます。

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

次のように使用します。

class Spam(object):
    time_to_cook = Complainer()

その後、 のメソッドのいずれかを呼び出そうとするとMinute、例外が発生します。Spamまたは、直接インスタンス化するつもりがない場合は、完全に抽象化して心配する必要はありません。

于 2014-06-16T01:16:38.677 に答える
0

NotImplementedErrorをお勧めします。タイプがどうあるべきかについてのヒントはありませんが、値を直接使用してはならないことは明らかです。

class Spam(object):
    time_to_cook = NotImplementedError

    def eat(self):
        ...

class SpamWithEggs(Spam):
    time_to_cook = Minutes(5)
于 2014-06-14T18:35:44.073 に答える