我可以这样做而且我没有任何问题:
class MyClass:
def introduce(self):
print("Hello, I am %s, and my name is " %(self))
MyClass.introduce(0)
MyClass().introduce()
我使用的是Visual Studio和Python 3.4.1。我不明白为什么这不会引发错误,因为我基本上设置了this
的值。这是一个功能,我不应该这样做吗?我应该检查自己是否实际上是MyClass
的实例?
答案 0 :(得分:2)
在Python 3中,MyClass.introduce()
引入时没有链接到任何对象。它被视为(独立)函数,就像您自己声明的任何其他函数一样。它在类中声明的事实与此无关。因此,introduce
被称为任何函数:具有一个参数的函数。
当你MyClass().introduce()
(注意第一组括号)时,引入被认为是属于对象的方法,该对象是类MyClass
的实例,因此自动添加自我的常规OO行为参数。
请注意,这与python 2不同。在python 2中,有一个检查来验证在调用时,为self参数传递的有效参数确实是一个正确类型的对象,即MyClass的一个实例。如果您在Python 2中尝试MyClass.introduce(0)
,您将获得:unbound method introduce() must be called with MyClass instance as first argument (got int instance instead)
。此检查不再存在于Python 3中,因为未绑定方法的概念不再存在。