将类方法访问实例方法的最佳方法

Kal*_*llz 4 python class-method python-2.7 python-3.x

class Test(object):

    def __init__(self):
        pass

    def testmethod(self):
        # instance method
        self.task(10)      # type-1 access class method

        cls = self.__class__ 
        cls.task(20)        # type-2 access class method 

    @classmethod 
    def task(cls,val)
        print(val)
Run Code Online (Sandbox Code Playgroud)

我有两种方法可以将类方法访问实例方法。

self.task(10)
Run Code Online (Sandbox Code Playgroud)

要么

cls = self.__class__
cls.task(20)
Run Code Online (Sandbox Code Playgroud)

我的问题是哪一个最好,为什么?

如果两种方法都不相同,那么我在哪种条件下使用哪种方法?

Ser*_*sta 6

self.task(10) 绝对是最好的。

首先,对于类实例,两者最终都将以相同的操作结束:

类实例
...
特殊属性:__dict__是属性字典;__class__是实例的类

  • 使用类实例对象调用类方法实际上会将对象的类传递给方法(参考:参考手册的同一章):

...当通过从类或实例中检索类方法对象创建实例方法对象时,其__self__属性是类本身

但是第一个比较简单,不需要使用特殊属性。