Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 作为方法/函数的class属性有什么用途_Python - Fatal编程技术网

Python 作为方法/函数的class属性有什么用途

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

在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>>
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中的对象,与其他任何东西一样。这意味着您可以传递它们,例如作为回调。