Heim  >  Artikel  >  Backend-Entwicklung  >  Python über Reflexion und spezielle Member-Methoden von Klassen

Python über Reflexion und spezielle Member-Methoden von Klassen

巴扎黑
巴扎黑Original
2017-09-16 10:06:341058Durchsuche

Dieser Artikel wird Ihnen die speziellen Methoden von Python zu Reflexion und Klassen vorstellen. Er ist sehr gut und hat Referenzwert.

Reflexion

Reflection bedeutet, dass es 4 integrierte Funktionen gibt: getattr, hasattr, setattr, delattr zum Abrufen von Mitgliedern, Überprüfen von Mitgliedern, Festlegen von Mitgliedern, Löschen von Mitgliedern


class Dog(object):
  def __init__(self,name):
    self.name = name
  def eat(self):
    print("%s is eating..."%self.name)
def run():
  print("runing ....")
d = Dog("lucy")
choise=input("请输入要调用的方法:")
if hasattr(d,choise):#判断一个对象是否有对应的字符串方法
  func=getattr(d,choise)#根据字符串去获取对象里相应的方法或属性的内存地址对象
  func()
else:
  setattr(d,choise,run)#setattr(obj,y,fun)相当于obj.y=fun,fun可以是属性或者方法
  v=getattr(d,choise)
  print(v)

dir([obj]):

Der Aufruf dieser Methode gibt eine Liste mit den meisten Attributnamen von obj zurück (es gibt einige spezielle Attribute). nicht im Lieferumfang enthalten). Der Standardwert von obj ist das aktuelle Modulobjekt.

hasattr(obj, attr):

Mit dieser Methode wird überprüft, ob obj ein Attribut mit einem Wert namens attr hat und einen booleschen Wert zurückgibt.

getattr(obj, attr):

Der Aufruf dieser Methode gibt den Wert des Attributs namens attr value in obj zurück, zum Beispiel wenn attr „ bar ', dann obj.bar zurückgeben.

setattr(obj, attr, val):

Der Aufruf dieser Methode weist dem Attribut namens attr von obj einen Wert zu. Wenn attr beispielsweise „bar“ ist, entspricht dies obj.bar = val.

__doc__ Zeigen Sie die detaillierten Beschreibungsinformationen an
__module__ stellt das Modul dar, in dem sich das aktuell betriebene Objekt befindet
__class__ stellt die Klasse dar, zu der das aktuell betriebene Objekt gehört
__init__ Der Konstruktor erstellt automatisch Objekte über Klassen Führen Sie die Destruktormethode
__del__ aus, das aktuelle Objekt wird im Speicher freigegeben, der Dämon wird automatisch getötet und ausgeführt.
Fügen Sie nach dem Objekt __call__ Klammern hinzu, um die Ausführung auszulösen
__dict__ Zeigen Sie die Mitglieder in der Klasse oder im Objekt an
__str__ wenn diese Methode in einer Klasse definiert ist, wird beim Drucken eines solchen Objekts der Rückgabewert dieser Methode ausgegeben
__getitem__ Wenn das Attributmitglied eines Wörterbuchs in der Klasse definiert ist, können Sie das
__setitem__-Einstellung zum Ändern des Wörterbuchs in der Klasse.
__delitem__ löscht die Daten des Wörterbuchs in der Klasse.
__metalass__ wird verwendet, um anzugeben, wer die Klasse instanziiert und erstellt.
__new__ löst __init__ aus, um ein zu erstellen Instanz


from lib.ss import a
#示例类 dog
class doges(object):
  """类的描述信息"""
  def __init__(self,name,food):
    self.name=name
    self.food=food
    self.data={}#定义一个类的字典
  def __call__(self, *args, **kwargs):#对象后面加括号解执行
    print(*args)
  def __str__(self):#默认输出返回值
    return self.name
  def __getitem__(self):#可以获取类的的字典
    return self.data
  def __setitem__(self, key, value):#可以设置类的的字典
    self.data[key]=value
  def __delitem__(self, key):#可以删除类的字典的内容
    del self.data[key]
dog=doges('xxx','iii')
print(dog.__doc__)
b=a()
print(b.__module__)#操作的对象的那个模块
print(dog.__class__)#当前操作的对象的类是什么
dog('111')#
print(doges.__dict__)#查看类或对象的成员 类只打印类的成员不打印对象的成员
print(dog.__dict__)#查看类或对象的成员 对象只打印对象的成员不打印类的成员
print(dog)#打印 __str__的返回值
print(dog.__str__())#打印返回值
dog['1']=1000#触发.__setitem__()
dog['2']=1000#触发.__setitem__()
print(dog.__getitem__())
print(dog.__delitem__('1'))#删除类中字典
print(dog.__getitem__())
#设置类的特殊方法
def func(self):
  print('hello word%s'%self.name)
  print()
def __init__(self,name,age):
  self.name=name
  self.age=age
##type参数 1:类名 2.类的基类 3.类的成员,字典格式
CAT=type('CAT',(object,),{'func':func,'__init__':__init__})
cat=CAT('喵喵',3)
cat.func()
print(cat.name,cat.age)

Das obige ist der detaillierte Inhalt vonPython über Reflexion und spezielle Member-Methoden von Klassen. 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