类属性的用途是什么?

时间:2018-06-28 10:08:58

标签: python

在Python中,当我们定义类时,其所有成员(包括变量和方法)也将成为该类的属性。在下面的示例中,MyClass1.aMyClass1.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.mydef1ins1.mydef1那样使用,它将返回该方法的对象(如果我错了,请纠正我)。
所以我的问题是,如果不调用Class / instance方法,我们该怎么办?有任何用例吗?或者只是了解一件事好?

2 个答案:

答案 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