用不同的类调用类方法

2024-09-28 01:30:30 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我们有以下两个类:

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()

对于正规的有界方法,很容易注入不同的self。我们只需要调用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”)的直观方法不起作用,因为类方法不是元类的属性。你知道吗


Tags: 方法selfmaindefwithmethodclasscls
1条回答
网友
1楼 · 发布于 2024-09-28 01:30:30

通过访问__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'>

相关问题 更多 >

    热门问题