Dieser Artikel stellt hauptsächlich detailliert vor, wie Python Methoden über Instanzmethodennamen aufruft. Ich hoffe, dass er für alle hilfreich ist.
Fall:
In einem bestimmten Projekt verwendet unser Code Grafikklassen aus zwei verschiedenen Bibliotheken:
Kreis, Dreieck
In beiden Klassen gibt es eine Methodenschnittstelle zum Erhalten des Bereichs, aber die Namen der Schnittstellen sind unterschiedlich
Anforderungen:
Vereinheitlichen Sie diese Schnittstellen und kümmern Sie sich nicht darum die spezifische Schnittstelle, solange ich die einheitliche Schnittstelle aufrufe, wird der entsprechende Bereich berechnet
Wie kann dieses Problem gelöst werden?
Definieren Sie eine einheitliche Schnittstellenfunktion und führen Sie Schnittstellenaufrufe durch Reflektion durch: getattr
#!/usr/bin/python3 from math import pi class Circle(object): def __init__(self, radius): self.radius = radius def getArea(self): return round(pow(self.radius, 2) * pi, 2) class Rectangle(object): def __init__(self, width, height): self.width = width self.height = height def get_area(self): return self.width * self.height # 定义统一接口 def func_area(obj): # 获取接口的字符串 for get_func in ['get_area', 'getArea']: # 通过反射进行取方法 func = getattr(obj, get_func, None) if func: return func() if __name__ == '__main__': c1 = Circle(5.0) r1 = Rectangle(4.0, 5.0) # 通过map高阶函数,返回一个可迭代对象 erea = map(func_area, [c1, r1]) print(list(erea))
Aufruf über die Methodcaller-Methode im Standardbibliotheksoperator
#!/usr/bin/python3 from math import pi from operator import methodcaller class Circle(object): def __init__(self, radius): self.radius = radius def getArea(self): return round(pow(self.radius, 2) * pi, 2) class Rectangle(object): def __init__(self, width, height): self.width = width self.height = height def get_area(self): return self.width * self.height if __name__ == '__main__': c1 = Circle(5.0) r1 = Rectangle(4.0, 5.0) # 第一个参数是函数字符串名字,后面是函数要求传入的参数,执行括号中传入对象 erea_c1 = methodcaller('getArea')(c1) erea_r1 = methodcaller('get_area')(r1) print(erea_c1, erea_r1)
Das obige ist der detaillierte Inhalt vonPython-Aufrufe nach Instanzmethodennamen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!