我能帮忙吗?我一直在python 3.3上尝试OOP。但是我在打印输出时遇到了问题。这是一个例子:
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>
有关克服这个问题的任何提示都会有很大的帮助。
感谢。
答案 0 :(得分: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 :(得分:1)
您必须包含()
:
nemo = pet ()
nemo.number_of_legs = 4
nemo.count_legs()
nemo.sleep()
这样,你实际上是在调用方法而不是获取方法。
[OUTPUT]
I have 4 legs
Zzzzz