python类的简单实例化

时间:2011-08-08 05:37:24

标签: python

您能否解释一下为什么'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>>

2 个答案:

答案 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