可能重复:
Polymorphism in Python
您好 我试图在类中调用一个属性,它继承自我的基类,但它不起作用。我想我错过了什么,但是什么? 这是我的代码:
class Produkt:
def __init__(self,pID,pProdNavn,pNetto):
self.__produktId = pID #atributt for produkt nummer
self.__produktNavn = pProdNavn #atributt for produkt navn
self.__produktNetto = pNetto #egenskap for nettopris
def getName(self): #Metode for å finne produktnavnet
return self.__produktNavn
class Bok(Produkt):
def __init__(self,pID,pProdNavn,pNetto,pForfatter):
Produkt.__init__(self,pID,pProdNavn,pNetto)
self.__produktForfatter = pForfatter #atributtp for forfatter
def getNet(self):
return self.__produktNetto
如您所见,我正在尝试调用从我的Produkt类继承的_productNetto属性。
我做错了什么?
/安迪
答案 0 :(得分:4)
如果你不在属性名称中使用双下划线
,它可以正常工作class Produkt:
def __init__(self,pID,pProdNavn,pNetto):
self.produktId = pID
self.produktNavn = pProdNavn
self.produktNetto = pNetto
def getName(self):
return self.__produktNavn
class Bok(Produkt):
def __init__(self,pID,pProdNavn,pNetto,pForfatter):
Produkt.__init__(self,pID,pProdNavn,pNetto)
self.produktForfatter = pForfatter
def getNet(self):
return self.produktNetto
x = Bok(1, 2, 3, 4)
print x.getNet()
输出:
3
否则名称会被破坏,并且正在寻找属性_Bok__produktNetto。请参阅:http://docs.python.org/reference/expressions.html#atom-identifiers
AttributeError: Bok instance has no attribute '_Bok__produktNetto'
答案 1 :(得分:0)
问题在于您使用两个前导下划线命名这些成员,这使得它们在该类之外的那些名称下不可见(请参阅http://docs.python.org/tutorial/classes.html)。
如果您在这两个地方使用单个下划线重命名这些字段,它将按您的意图运行。