是否可以在不创建该类的新对象的情况下调用类的实例方法?

时间:2014-09-03 13:43:01

标签: class python-3.x methods instance

我可以这样做而且我没有任何问题:

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的实例?

1 个答案:

答案 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中,因为未绑定方法的概念不再存在。