gpt4 book ai didi

python - 用不同的类调用类方法

转载 作者:太空宇宙 更新时间:2023-11-03 11:21:41 25 4
gpt4 key购买 nike

假设我们有以下两个类:

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

对于正常的绑定(bind)方法,很容易注入(inject)不同的 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 的类)”的直观方法不起作用,因为类方法不是元类的属性。

最佳答案

通过访问__func__ 属性,您可以获得未绑定(bind)的函数对象。

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'>

关于python - 用不同的类调用类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41765655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com