Heim >Backend-Entwicklung >Python-Tutorial >Einführung in Metaklassen und Aufzählungsklassen in Python (Codebeispiele)
Dieser Artikel bietet Ihnen eine Einführung in Metaklassen und Aufzählungsklassen in Python (Codebeispiele). Ich hoffe, dass er Ihnen als Referenz dienen wird.
1. Metaklasse
1. Die Funktion type() kann den Typ des Objekts zurückgeben oder einen neuen Typ erstellen. Es kann das Verhalten beim Erstellen einer Klasse ändern und eine dynamische Erstellung von Klassen ermöglichen.
# 第一个参数:类名 # 第二个参数:父类元祖 # 第三个参数:属性、方法 A = type("A",(object,),{"name":"zhou"}) a = A() print(type(A)) # <class 'type'> print(type(a)) # <class '__main__.A'> print(a.name) # zhou
2. Sie können die Metaklasse einer Klasse über die Metaklasse
class MyType(type): pass class A(metaclass=MyType): pass print(type(A)) # <class '__main__.MyType'>
Eine andere benannte Funktionsmetaklasse (nachgedruckt) angeben:
def upper_attr(future_class_name, future_class_parents, future_class_attr): attrs = ((name, value) for name, value in future_class_attr.items() if not name.startswith('__')) uppercase_attr = dict((name.upper(), value) for name, value in attrs) return type(future_class_name, future_class_parents, uppercase_attr) class Foo(metaclass = upper_attr): # 指定元类 bar = 'bip' print(hasattr(Foo, 'bar')) # 输出: False print(hasattr(Foo, 'BAR')) # 输出:True
2. Aufzählungsklasse
In der Entwicklung werden häufig mehrere Konstantensätze festgelegt. Enum kann einen Satz verwandter Konstanten in einer Klasse definieren, und die Klasse ist unveränderlich und die Mitglieder können direkt verglichen werden.
from enum import Enum pay_methods = Enum("PayMethods",("CASH","WEIXIN","ALIPAY","UNIONPAY",)) for name, member in pay_methods.__members__.items(): print(name, ',', member, ',', member.value) # CASH , PayMethods.CASH , 1 # WEIXIN , PayMethods.WEIXIN , 2 # ALIPAY , PayMethods.ALIPAY , 3 # UNIONPAY , PayMethods.UNIONPAY , 4 # value属性则是自动赋给成员的int常量,默认从1开始计数。
kann auch durch Erben der Enum-Klasse angepasst werden:
from enum import Enum, unique @unique # 帮助我们检查是否重复 class PayMethods(Enum): CASH = 0 # 设置CASH.value = 0 WEIXIN = 1 ALIPAY = 2 UNIONPAY = 3 print(PayMethods['CASH']) # PayMethods.CASH print(PayMethods(1)) # PayMethods.WEIXIN print(PayMethods.ALIPAY.value) # 2
Das obige ist der detaillierte Inhalt vonEinführung in Metaklassen und Aufzählungsklassen in Python (Codebeispiele). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!