請幫我理解這一點。我創建了一個非常簡單的程序來嘗試理解類。Python TypeError:'str'對象不能被類調用
class One(object):
def __init__(self, class2):
self.name = 'Amy'
self.age = 21
self.class2 = class2
def greeting(self):
self.name = raw_input("What is your name?: ")
print 'hi %s' % self.name
def birthday(self):
self.age = int(raw_input("What is your age?: "))
print self.age
def buy(self):
print 'You buy ', self.class2.name
class Two(object):
def __init__(self):
self.name = 'Polly'
self.gender = 'female'
def name(self):
self.gender = raw_input("Is she male or female? ")
if self.gender == 'male'.lower():
self.gender = 'male'
else:
self.gender = 'female'
self.name = raw_input("What do you want to name her? ")
print "Her gender is %s and her name is %s" % (self.gender, self.name)
Polly = Two()
Amy = One(Polly)
# I want it to print
Amy.greeting()
Amy.buy()
Amy.birthday()
的問題代碼
Polly.name() # TypeError: 'str' object is not callable
Two.name(Polly)# Works. Why?
爲什麼調用類的實例波利行不通的方法?我很迷茫。我已經看過http://mail.python.org/pipermail/tutor/2003-May/022128.html和其他與此類似的Stackoverflow問題,但我沒有明白。非常感謝。
非常感謝您的明確解釋。我有一個相關的問題。如果我不想設置一個初始名稱並通過raw_input設置名稱,該怎麼辦?如果我設置了'self.name = name self.gender = gender'和'init __(self,name,gender)',然後通過'Polly = Two(name,gender)''調用它,我會得到錯誤,所以我不清楚在這裏做什麼。 – user1186742
想想我可能已經得到它。我只是將這些實例變量放入方法而不是__init__中,或者將它們設置爲空字符串。 – user1186742
不要在類中做'raw_input'工作;分開的責任。人們不負責弄清他們的名字是什麼;他們的名字是在出生時分配的,呃創造。 –