在python中调用继承的属性

时间:2010-11-14 13:57:55

标签: python

  

可能重复:
  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属性。

我做错了什么?

/安迪

2 个答案:

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

如果您在这两个地方使用单个下划线重命名这些字段,它将按您的意图运行。