问题描述
刚刚开始使用Python,我是Derek Banas的粉丝并且一直在关注一个教程并且我遇到了一些代码。
Just starting out Python, i'm a fan of Derek Banas and have been following a tutorial and I'm stuck with a bit of code.
class Dog(Animal):
__owner = ""
def __init__(self, name, height, weight, sound, owner):
self.__owner = owner
super(Dog, self).__init__(name, height, weight, sound)
def set_owner(self, owner):
self.__owner = owner
def get_owner(self):
return self.__owner
def get_type(self):
print("Dog")
def tostring(self):
return "{} is {} cm tall and {} kilograms and say {} His owner is {}".format(self.__name,
self.__height,
self.__weight,
self.__sound,
self.__owner)
def multiple_sounds(self, how_many=None):
if how_many is None:
print(self.get_sound())
else:
print(self.get_sound() * how_many)
spot = Dog("Spot", 53, 27, "Ruff", "Seb")
print(spot.tostring())
我收到了以下错误:
Traceback (most recent call last):
File "G:/JetBrains/PyCharm Community Edition 4.5.4/PyCharm Projects/Testing 123/testing objects.py", line 87, in <module>
print(spot.tostring())
File "G:/JetBrains/PyCharm Community Edition 4.5.4/PyCharm Projects/Testing 123/testing objects.py", line 73, in tostring
return "{} is {} cm tall and {} kilograms and say {} His owner is {}".format(self.__name,
AttributeError: 'Dog' object has no attribute '_Dog__name'
正如我之前从使用vb编程转移的那样,'tostring'方法格式的缩进令我感到困惑一点点。我甚至尝试将它全部放入一行,它仍然无法识别Animal类中的继承属性'__name'。
As I've previously transferred from programming with vb, the indentation for the format of the 'tostring' method baffles me a little bit. I even tried putting it all into one line and it still doesn't recognize the inherited attribute '__name' from the class Animal.
帮助将不胜感激。
编辑:
值得一提的是,我正在使用Pycharm来写这些内容。
It might be worth mentioning that i'm using Pycharm to write all this in.
此处还有动物类
class Animal:
__name = ""
__height = 0
__weight = 0
__sound = 0
def __init__(self, name, height, weight, sound):
self.__name = name
self.__height = height
self.__weight = weight
self.__sound = sound
def set_name(self, name):
self.__name = name
def set_height(self, height):
self.__height = height
def set_weight(self, weight):
self.__weight = weight
def set_sound(self, sound):
self.__sound = sound
def get_name(self):
return self.__name
def get_height(self):
return self.__height
def get_weight(self):
return self.__weight
def get_sound(self):
return self.__sound
def get_type(self):
print("Animal")
def tostring(self):
return "{} is {} cm tall and {} kilograms and say {}".format(self.__name,
self.__height,
self.__weight,
self.__sound)
推荐答案
您的 Animal
类正在使用。来自 -
Your Animal
class is using Name Mangling. From documentation -
(强调我的)
因此,在您的 Animal
类定义了任何名称后,例如 __ name
已更改为 _Animal__name
等等。您还需要在 Dog中访问它们
class。
Hence , after your Animal
class got defined any name such as __name
would have changed to _Animal__name
, etc. You would also need to access them alike that in your Dog
class.
但我认为你实际上不需要使用 Name Mangling ,你应该避免使用两个领先的下划线,如果你不是指 Name Mangling 发生。
But I don't think you actually need to use Name Mangling , you should avoid using the two leading underscores, if you didn't mean for Name Mangling to happen.
这篇关于Python继承返回属性错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!