Heim > Backend-Entwicklung > Python-Tutorial > Einführung in Metaklassen und Aufzählungsklassen in Python (Codebeispiele)

Einführung in Metaklassen und Aufzählungsklassen in Python (Codebeispiele)

不言
Freigeben: 2018-12-04 17:37:00
nach vorne
2281 Leute haben es durchsucht

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 &#39;type&#39;>
print(type(a)) # <class &#39;__main__.A&#39;>
print(a.name) # zhou
Nach dem Login kopieren

2. Sie können die Metaklasse einer Klasse über die Metaklasse

class MyType(type):
    pass

class A(metaclass=MyType):
    pass

print(type(A)) # <class &#39;__main__.MyType&#39;>
Nach dem Login kopieren

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
Nach dem Login kopieren

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开始计数。
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Verwandte Etiketten:
Erklärung dieser Website
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
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage