![](/img/trans.png)
[英]How to call a method in python that is in a different class, where the class is in a different file?
[英]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()
對於正常的綁定方法,很容易注入不同的自我。 我們只需調用Class1
的method()
但使用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.