长期阅读,第一次提问。无论如何,这是我正在使用的代码:
class Person(object):
def __init__(self, s):
self.name = s
self.secret = 'I HAVE THE COOKIES'
@classmethod
def shout(self):
print self.name.upper()
class Kid(Person):
def __init__(self, s):
super(Kid,self).__init__(s)
self.age = 12
b = Person('Bob')
k = Kid('Bobby')
print b.name
print k.name
print k.age
print k.secret
k.shout()
导致此输出和错误:
Bob
Bobby
12
I HAVE THE COOKIES
Traceback (most recent call last):
File "a.py", line 22, in <module>
k.shout()
File "a.py", line 8, in shout
print self.name.upper()
AttributeError: type object 'Kid' has no attribute 'name'
我假设 Kid 能够使用 Person 的喊叫方法,将其(孩子的)“自我”替换为 parent(该方法所在的位置)。显然,事实并非如此。我知道我可以在 init 之外声明名称,但这既不能容纳输入的数据又不能。另一种选择是为 Person 的每个孩子重新定义喊叫,但这是我试图避免的大量重复代码。
首先十分感谢!