2013-02-25 94 views
1

我在这里有一些单元转换程序的代码;它会抛出一个NameError,因为Python的继承顺序。Python的类变量和继承

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实例变量,但是在每个实例上创建一个新集合似乎很浪费。在这种特殊情况下,共享行为似乎也是最佳的。

+1

什么让你相信你需要多个类,甚至在这里继承,当同一类的多个实例可能是足够的?在这里没有显示的子类中是否存在一些行为? – 2013-02-26 00:04:22

回答

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)。

+2

你错过了一些'self's – 2013-02-25 23:41:31

+1

Woops,谢谢你指出我的疏忽:P – 2013-02-25 23:43:22