被覆盖的方法不包含自我?

这是我在机器上玩过的一个示例:


$ python

Python 2.7.4 (default, Apr 19 2013, 18:28:01) 

[GCC 4.7.3] on linux2

Type "help", "copyright", "credits" or "license" for more information.

# just a test class 

>>> class A(object):

...   def hi(self):

...     print("hi")

... 

>>> a = A()

>>> a.hi()

hi

>>> def hello(self):

...   print("hello")

... 

>>> 

>>> hello(None)

hello

>>> 

>>> 

>>> 

>>> a.hi = hello

# now I would expect for hi to work the same way as before

# and it just prints hello instead of hi.

>>> a.hi()

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

TypeError: hello() takes exactly 1 argument (0 given)

>>> 

>>> def hello():

...   print("hello")

... 

# but instead this one works, which doesn't contain any

# reference to self

>>> a.hi = hello

>>> a.hi()

hello

>>> 

>>> 

>>> 

>>> 

>>> a.hello = hello

>>> a.hello()

hello

这是怎么回事 当将函数用作方法时,为什么函数未获得参数self?我需要做什么,才能在其中获得自我的参考?


浮云间
浏览 165回答 2
2回答

白板的微信

在您的情况下,通过实例引用的类中的方法绑定到该实例:In [3]: a.hiOut[3]: <bound method A.hi of <__main__.A object at 0x218ab10>>相比于:In [4]: A.hiOut[4]: <unbound method A.hi>因此,要达到您可能想要的效果,请执行In [5]: def hello(self):&nbsp; &nbsp;...:&nbsp; &nbsp; &nbsp;print "hello"&nbsp; &nbsp;...:&nbsp; &nbsp; &nbsp;In [6]: A.hi = helloIn [7]: a.hi()hello当心-这将适用于的所有实例A。但是,如果您只想在一个实例上重写一个方法,您真的需要传递self吗?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python