長年の読者、初めての質問者。とにかく、私が取り組んでいるコードは次のとおりです。
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 のshout メソッドを使用できると想定しました。どうやら、そうではありません。init の外で name を宣言できることは知っていますが、それは入力されたデータに対応できず、ダメです。もう 1 つの方法は、Person のすべての子に対してshout を再定義することですが、それは私が避けようとしているコードの繰り返しです。
よろしくお願いします!