3
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)
我有兩種方法可以將類方法訪問成實例方法。訪問類方法到實例方法的最佳方法
self.task(10)
或
cls = self.__class__
cls.task(20)
我的問題是哪一個是最好的,爲什麼?
如果兩種方式不一樣,那麼我使用哪一種條件?
您也可以直接在該方法內直接調用'Test.task(20)'而不是雙線程。 – xgord
@xgord:是的,但這兩個是*不相等。 'Task.task(20)'將總是調用'Task'中定義的'task',而一個*子類*可以覆蓋該方法。在這種情況下,'SubTask'類中的'self.task(20)'將訪問'SubTask.task(20)'。 –
這取決於預期用途 - 'self'將始終引用當前實例的方法,並且不僅通過繼承鏈持久化(與通過類名調用相比,即'Test.task()'),最新的覆蓋,即使是動態的,但通過類類型引用將始終指向實際的類方法。沒有什麼能阻止你設置'your_instance.task = some_dynamic_override',然後'self.task()'將調用該函數。 – zwer