Python'da yeniyim ve yaptığımın doğru olduğundan emin değildim. Bir temel sınıf A
ve bir kalıtım sınıfı B
var. Bunu çalıştırdığınızdaPython özelliği devralma
class A(object):
def __init__(self, name):
self.__name = name
@property
def name(self):
return self.__name
@name.setter
def name(self, name):
self.__name = name
class B(A):
def __init__(self, name):
super(NominalValue, self).__init__(name)
@property
def name2(self):
return self.__name2
@name2.setter
def name2(self, n):
self.__name2 = n
def toString():
print self.__name + self.__name2
if __name__ == "__main__":
instance = B('name');
instance.toString()
o sınıf B
herhangi bir nitelik __name
yok şikayet ediyor.
AttributeError: 'B' object has no attribute '_B__name'
Açıkçası doğru bir şekilde miras yapıyorum. Özelliklerin doğru şekilde miras alınmasını nasıl sağlarız ve miras alınan sınıftaki özniteliklerin tekrarlanmasını önler misiniz?
Çift baştaki alt çizgi, kalıtımınızı engelleyen [özel anlam] (https://docs.python.org/2/tutorial/classes.html#private-variables-and-class-local-references) içeriyor. Üst sınıfın '__name' özniteliğine erişmek için bence 'self._A__name' olarak adlandırmanız gerekir. –
Cevabında 6502'den bahsedildiği için, sınıfınıza bir özellik yazmak zorunda kalmadan * PLANLAMA * olması gerekmemelidir.Bu, Python'daki özelliklerin güçlü yönlerinden biridir: bir özelliği bir mülkiyete anında dönüştürmek çok kolaydır. Bir özelliği almak, ayarlamak veya silmek için özel bir mantığa sahip olmanız gerektiği kanıtlanmadıkça, bunu yapmak için bir özellik kullanmayın. –