您能否解释一下为什么'hello world'不会在下面退回?我需要修改什么才能在调用时正确表达?感谢。
>>> class MyClass:
... i=12345
... def f(self):
... return 'hello world'
...
>>> x=MyClass()
>>> x.i
12345
>>> x.f
<bound method MyClass.f of <__main__.MyClass instance at 0x060100F8>>
答案 0 :(得分:8)
f
是一种方法,因此您需要调用它。即x.f()
与没有类的函数定义没什么不同:
def f():
return 'something'
如果您只是引用f
,您将获得该功能
print f
产生<function f at 0xdcc2a8>
,而
print f()
收益"something"
。
答案 1 :(得分:5)
当在REPL(或Python控制台或其他)内部时,将始终打印最后一个语句返回的值。如果它只是一个值,则将打印该值:
>>> 1
1
如果是作业,则不会打印任何内容:
>>> a = 1
但是,请注意:
>>> a = 1
>>> a
1
好的,所以在上面的代码中:
>>> x=MyClass()
>>> x # I'm adding this :-). The number below may be different, it refers to a
# position in memory which is occupied by the variable x
<__main__.MyClass instance at 0x060100F8>
因此,x的值是位于内存中某个位置的MyClass实例。
>>> x.i
12345
x.i的值为12345,因此将按上述方式打印。
>>> x.f
<bound method MyClass.f of <__main__.MyClass instance at 0x060100F8>>
f的值是x的方法(这意味着在某事物前面有def
,这是一种方法)。现在,因为它是一种方法,让我们通过在它之后添加()
来调用它:
>>> x.f()
'hello world'
f方法在变量x中的MyClass实例返回的值是'hello world'!可是等等!有报价。让我们使用print
函数来消除它们:
>>> print(x.f()) # this may be print x.f() (note the number of parens)
# based on different versions of Python.
hello world