我只是想知道Python究竟是如何在幕後處理這個問題的。因此,採取(由Brett斯拉特金從有效的Python)這樣的代碼片段:正在運行super().__ init __(值)其中value是@property
class Resistor(object):
def __init__(self, ohms):
self.ohms = ohms
self.voltage = 0
self.current = 0
class VoltageResistor(Resistor):
def __init__(self, ohms):
super().__init__(ohms)
self._voltage = 0
@property
def ohms(self):
return self._ohms
@ohms.setter
def ohms(self, ohms):
if ohms <= 0:
raise ValueError('{o} ohms must be > 0'.format(o=ohms))
self._ohms = ohms
@property
def voltage(self):
return self._voltage
@voltage.setter
def voltage(self, voltage):
self._voltage = voltage
self.current = self._voltage/self.ohms
VoltageResistor(-1) # fails
運行super()
呼叫調用屬性檢查,以便你不能用零或負值實例。我感到困惑的是,我認爲既然__init__(ohms)
調用正在超類上運行,它是否應該在不同的範圍內(超類的範圍),從而免除調用@property
檢查?
沒有; 'self'仍然是'Resistor .__ init__'中'VoltageResistor'的一個實例;範圍與它無關。 – chepner