2014-04-27 5 views
1

Могу ли я, пожалуйста, получить помощь. Я тестировал OOP на python 3.3. Однако у меня возникли проблемы с печатью моего вывода. Вот пример:Невозможно распечатать вывод из класса

class pet(object): 
    number_of_legs = 0 
    def sleep (self): 
     print('Zzzzz') 
    def count_legs(self): 
     print ('I have %s legs' %(self.number_of_legs)) 

nemo = pet() 
nemo.number_of_legs = 4 
nemo.count_legs 
nemo.sleep 

выход:

bound method pet.count_legs of <__main__.pet object at 0x033D4230> 
bound method pet.sleep of <__main__.pet object at 0x033D4230> 

Любые советы по преодолению этой проблемы было бы большим подспорьем.

Спасибо.

ответ

4

Вы должны фактически вызова методов, с помощью (), даже если нет аргументов:

nemo.count_legs() 
nemo.sleep() 

метода является действительно только вызываемым атрибутом; вы сами получаете объект метода с instance.attribute и вызываете его, используя круглые скобки instance.attribute().

Кроме того, обратите внимание, что number_of_legs, как у вас есть, является атрибутом класса , который используется всеми экземплярами. Если предположить, что разные домашние животные могут иметь разное количество ног, я бы вместо того, чтобы сделать его экземпляр атрибута, которые вы можете сделать при инициализации:

class Pet: 

    def __init__(self, legs): 
     self.legs = legs 

    def sleep(self): 
     print("Zzz") 

    def count_legs(self): 
     print("I have {0.legs} legs.".format(self)) 

(классы именуются с прописными буквами по соглашению/PEP-008 и str.format, в отличие от %, не устарел). Теперь вы можете сделать, например.

nemo = Pet(4) 
1

Вы должны включить ():

nemo = pet() 
nemo.number_of_legs = 4 
nemo.count_legs() 
nemo.sleep() 

Таким образом, вы на самом деле делает вызов метода вместо того, чтобы этот метод.

[OUTPUT] 
I have 4 legs 
Zzzzz 
Смежные вопросы