Heim  >  Artikel  >  Backend-Entwicklung  >  Python-Aufrufe nach Instanzmethodennamen

Python-Aufrufe nach Instanzmethodennamen

小云云
小云云Original
2018-03-29 13:33:461846Durchsuche

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn