在Python中,当我们定义类时,其所有成员(包括变量和方法)也将成为该类的属性。在下面的示例中,MyClass1.a
和MyClass1.mydef1
是类MyClass1
的属性。
class MyClass1:
a = 10
def mydef1(self):
return 0
ins1 = MyClass1() # create instance
print(MyClass1.a) # access class attribute which is class variable
print(MyClass1.mydef1) # No idea what to do with it so just printing
print(ins1.mydef1) # No idea what to do with it so just printing
输出
10
<function MyClass1.mydef1 at 0x0000000002122EA0>
<bound method MyClass1.mydef1 of <__main__.MyClass1 object at 0x000000000212D0F0>>
此处的属性a
是一个变量,可以像其他任何变量一样使用。
但是mydef1
是一种方法,如果不调用它,而只是像MyClass1.mydef1
或ins1.mydef1
那样使用,它将返回该方法的对象(如果我错了,请纠正我)。
所以我的问题是,如果不调用Class / instance方法,我们该怎么办?有任何用例吗?或者只是了解一件事好?
答案 0 :(得分:0)
当然可以使用适当的参数调用很好的实例方法:
print(ins1.mydef1()) # no parameters, so empty parenthesis, this call should print "0" in your example instead of the method description
如果您在不带括号的情况下使用它,则是在参考该函数,除非您检查类中可用的方法列表或类似的东西,否则您将无法使用它。
答案 1 :(得分:0)
碰巧是一个函数的类的属性成为实例或该类的方法:
inst.foo(params, ...)
在内部翻译为:
cls.foo(inst, params, ...)
这意味着实际调用的是实例类的属性,实例本身位于参数列表的前面。调用对象上的方法只是Python语法。
在您的示例中,正确的用法是:
print(MyClass1.mydef1(ins1)) # prints 0
print(ins1.mydef1()) # also prints 0