我正在阅读9.3.2。来自python docs的类对象我希望有人可以清理以下内容:
两个场景如何回归' hello world'?我有点理解的第一个例子(至少我相信我这样做),因为自我引用了对象本身' MyClass'我想通过' m'在第二个实例中自我也是这样做的?功能是否自我'只需要参考一个' MyClass'对象
>>> class MyClass:
... """A simple example class"""
... i = 12345
... def f(self):
... return 'hello world'
...
>>> MyClass.f(MyClass)
'hello world'
>>> m = MyClass()
>>> MyClass.f(m)
'hello world'
答案 0 :(得分:3)
Python是“duck-typed”,意味着 类型self
无关紧要,只要它提供正确的接口即可。在这里,self
未在函数体中使用,因此您可以将任何绝对传递给MyClass.f
,这样就可以了。
>>> MyClass.f(None)
'hello world'
>>> MyClass.f(9)
'hello world'
>>> MyClass.f("foo")
'hello world'
答案 1 :(得分:0)
MyClass.f('what the...')
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-2-cca57c03fecc> in <module>()
----> 1 MyClass.f('what the...')
TypeError: unbound method f() must be called with MyClass instance as first argument (got str instance instead)
mc = MyClass()
mc.f('what?')
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-4-bcd3830312d3> in <module>()
----> 1 mc.f('what?')
TypeError: f() takes exactly 1 argument (2 given)
在第一个实例中,该函数需要MyClass
的实例作为第一个参数。在第二个中,实例被隐式传递。因此,字符串参数What?
是函数的第二个参数,这是意外的。
你可能想要什么:
class MyClass:
@staticmethod
def f():
print('hello world')
>>> MyClass.f()
hello world
mc = MyClass()
>>> mc.f()
hello world