1

ここに単位変換プログラムのコードがあります。NameErrorPython の継承順序により、 がスローされます。

class _Units :
    _metric_unit_names   = {'metric'}
    _standard_unit_names = {'standard'}

class TemperatureUnits (_Units) :
    _metric_unit_names.update({'celsius', 'c'})
    _standard_unit_names.update({'fahrenheit', 'f'})

TemperatureUnits()

この状況に「最適な」テクニックは何だろうと思っていました。_metric_unit_names変数を作成してインスタンス化することはでき_standard_unit_namesますが、インスタンス化のたびに新しいセットを作成するのは無駄に思えます。また、この特定の状況では、行動を共有することが最適なようです。

4

1 に答える 1

3

最善の方法は、属性をクラスの静的属性として定義しないことです。あなたが求めているのは次のようなものです:

class _Units :
    def __init__(self):
        self._metric_unit_names   = {'metric'}
        self._standard_unit_names = {'standard'}

class TemperatureUnits (_Units) :
    def __init__(self):
        _Units.__init__(self)
        self._metric_unit_names.update({'celsius', 'c'})
        self._standard_unit_names.update({'fahrenheit', 'f'})

TemperatureUnits()

の外部で属性を定義すると__init__、それらはクラスの静的メンバー (つまり_Units._metric_unit_names) になります。内でそれらを定義するinitと、それらはクラス インスタンス (つまりmy_units_instance._metric_unit_names) の属性になります。

于 2013-02-25T23:38:39.293 に答える