簡體   English   中英

用不同的類調用類方法

[英]Call class method with different class

我們假設我們有以下兩個類:

class Class1:
    def method(self):
        print("Class1.method() with self =", self)
    @classmethod
    def clsmethod(cls):
        print("Class1.clsmethod() with cls =", cls)
obj1 = Class1()

class Class2:
    def method(self):
        print("Class2.method() with self =", self)
    @classmethod
    def clsmethod(cls):
        print("Class2.clsmethod() with cls =", cls)
obj2 = Class2()

對於正常的綁定方法,很容易注入不同的自我。 我們只需調用Class1method()但使用obj2作為self

>>> Class1.method(o2)
Class1.method() with self = <__main__.Class2 object at 0x...>

現在的問題是:我怎么能用類方法做類似的事情呢?

>>> Class1.clsmethod(Class2)
Class1.clsmethod() with cls = <__main__.Class2 object at 0x...>

什么樣的Class1必須被替換? 使用type(Class1) (“類Class1 ”類似於“ obj1類” type(Class1)的直觀方法不起作用,因為類方法不是元類的屬性。

通過訪問__func__屬性,您可以獲得未綁定的函數對象。

class Class1:
    def method(self):
        print("Class1.method() with self =", self)
    @classmethod
    def clsmethod(cls):
        print("Class1.clsmethod() with cls =", cls)

class Class2:
    def method(self):
        print("Class2.method() with self =", self)
    @classmethod
    def clsmethod(cls):
        print("Class2.clsmethod() with cls =", cls)

Class1.clsmethod.__func__(Class2)  # <----
# prints
# Class1.clsmethod() with cls = <class '__main__.Class2'>

Class2.clsmethod.__func__(Class1)  # <----
# prints
# Class2.clsmethod() with cls = <class '__main__.Class1'>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM