使用多重继承时引用基础 class 属性
Referencing base class attributes when using multiple inheritance
class Shape:
def __init__(self,center,name):
self.__name = name
self.center = center
def getName(self):
return self.__name
def __add__(self,otherShape):
return Shape(name = self.__name, center = self.center + otherShape.center)
class Size:
def __init__(self,surface,magnitude):
self.surface = surface
self.magnitude = magnitude
def __eq__(self, otherSize):
try:
a = self.magnitude == otherSize.magnitude and self.surface == otherSize.surface
except:
print('Wrong type of atributes')
return a
class Dreieck(Size,Shape):
def __init__(self,center,name,surface,magnitude,a,b,c):
Shape.__init__(self,center,name)
Size.__init__(self,surface,magnitude)
Dreieck.a = a
Dreieck.b = b
Dreieck.c = c
def pitagoras(self):
if self.a+self.b==self.c and self.a**2 + self.b**2 == self.c**2:
return True
else:
return False
def __add__(self,otherDreieck):
return Dreieck(self.center, self.__name, self.surface, self.magnitude,self.a+otherDreieck.a, self.b+otherDreieck.b, self.c+otherDreieck.b)
我正在 Python 中做一个多重继承的简单示例,我找不到为什么通过添加 class Dreieck
的两个对象我得到一个 AttributeError 'Dreieck' object has no attribute 'name'
.我想这是因为 name
属性是私有的,但我认为我在这里继承了它:
Shape.__init__(self,center,name)
在 class 本身之外,私有名称被破坏了。参见 Private Variables and Class-local References。
您可以通过在代码中使用损坏的名称来解决此问题。换句话说,尝试将其引用为 self._Shape__name
.
class Shape:
def __init__(self,center,name):
self.__name = name
self.center = center
def getName(self):
return self.__name
def __add__(self,otherShape):
return Shape(name = self.__name, center = self.center + otherShape.center)
class Size:
def __init__(self,surface,magnitude):
self.surface = surface
self.magnitude = magnitude
def __eq__(self, otherSize):
try:
a = self.magnitude == otherSize.magnitude and self.surface == otherSize.surface
except:
print('Wrong type of atributes')
return a
class Dreieck(Size,Shape):
def __init__(self,center,name,surface,magnitude,a,b,c):
Shape.__init__(self,center,name)
Size.__init__(self,surface,magnitude)
Dreieck.a = a
Dreieck.b = b
Dreieck.c = c
def pitagoras(self):
if self.a+self.b==self.c and self.a**2 + self.b**2 == self.c**2:
return True
else:
return False
def __add__(self,otherDreieck):
return Dreieck(self.center, self.__name, self.surface, self.magnitude,self.a+otherDreieck.a, self.b+otherDreieck.b, self.c+otherDreieck.b)
我正在 Python 中做一个多重继承的简单示例,我找不到为什么通过添加 class Dreieck
的两个对象我得到一个 AttributeError 'Dreieck' object has no attribute 'name'
.我想这是因为 name
属性是私有的,但我认为我在这里继承了它:
Shape.__init__(self,center,name)
在 class 本身之外,私有名称被破坏了。参见 Private Variables and Class-local References。
您可以通过在代码中使用损坏的名称来解决此问题。换句话说,尝试将其引用为 self._Shape__name
.