Python 作为方法/函数的class属性有什么用途
在Python中,当我们定义类时,它的所有成员(包括变量和方法)也成为该类的属性。在下面的示例中,Python 作为方法/函数的class属性有什么用途,python,Python,在Python中,当我们定义类时,它的所有成员(包括变量和方法)也成为该类的属性。在下面的示例中,MyClass1.a和MyClass1.mydef1是类MyClass1的属性 class MyClass1: a = 10 def mydef1(self): return 0 ins1 = MyClass1() # create instance print(MyClass1.a) # access class attribut
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>>
10
这里属性a
是一个变量,它可以像任何其他变量一样使用。
但是mydef1
是一个方法,如果它没有被调用,只是像MyClass1.mydef1
或ins1.mydef1
那样使用,它会返回该方法的对象(如果我错了,请纠正我)。所以我的问题是,在不调用类/实例方法的情况下,我们可以对类/实例方法做什么?它有什么使用案例吗?或者知道这件事很好吗?当然,可以使用适当的参数调用实例方法:
print(ins1.mydef1()) # no parameters, so empty parenthesis, this call should print "0" in your example instead of the method description
如果您在没有括号的情况下使用它,您就是在玩函数引用,我认为您不能使用它,除非检查类中可用的方法列表或诸如此类的内容。类的属性恰好是函数,它将成为实例或该类的方法:
inst.foo(params, ...)
内部翻译为:
cls.foo(inst, params, ...)
这意味着实际调用的是实例类中的属性,实例本身在参数列表前面。调用对象上的方法只是Python语法
在您的示例中,正确的用法是:
print(MyClass1.mydef1(ins1)) # prints 0
print(ins1.mydef1()) # also prints 0
函数(因此方法)是Python中的对象,与其他任何东西一样。这意味着您可以传递它们,例如作为回调。