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

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

不言
不言nach vorne
2018-12-04 17:37:002204Durchsuche

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

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;>

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen

In Verbindung stehende Artikel

Mehr sehen