Por favor, ayúdame a entender esto. Creé un programa realmente simple para tratar de entender las clases.Python TypeError: el objeto 'str' no se puede llamar para la clase
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()
el código de problema
Polly.name() # TypeError: 'str' object is not callable
Two.name(Polly)# Works. Why?
¿Por qué se llama al método en la instancia de la clase Polly no funciona? Estoy bastante perdido. He visto http://mail.python.org/pipermail/tutor/2003-May/022128.html y otras preguntas sobre Stackoverflow similares a esto, pero no lo estoy obteniendo. Muchas gracias.
Muchas gracias por esta explicación clara. Tengo una pregunta relacionada. ¿Qué sucede si no deseo establecer un nombre inicial y simplemente configurar el nombre a través de raw_input? Obtengo errores si configuro 'self.name = name self.gender = gender' y' init __ (self, name, gender) 'y luego lo llamo mediante' Polly = Two (name, gender) ', entonces estoy no está claro qué hacer aquí. – user1186742
Creo que puede haberlo conseguido. Acabo de poner esas variables de instancia en los métodos en lugar de __init__, o simplemente configurarlas en cadenas vacías. – user1186742
No hagas el trabajo 'raw_input' dentro de la clase; responsabilidades separadas. Las personas no son responsables de descifrar cuáles son sus nombres; sus nombres se asignan al nacer, er, creación. –