Python 3.4'ten itibaren DynamicClassAttribute
adlı bir tanımlayıcı vardır. dokümantasyon devletler:Bir DynamicClassAttribute nedir ve nasıl kullanırım?
types.DynamicClassAttribute(fget=None, fset=None, fdel=None, doc=None)
Rota
__getattr__
için bir sınıf üzerinde erişime bağlıyor.Bu, bir örnek aracılığıyla ve bir sınıf aracılığıyla erişildiğinde farklı davranan öznitelikleri tanımlamak için kullanılan bir tanımlayıcıdır. Örnek erişimi normal kalır, ancak bir sınıftaki bir özelliğe erişim, sınıfın
__getattr__
yöntemine yönlendirilir; BuAttributeError
yükseltilerek yapılır.Bu, bir örnek üzerinde özelliklerin etkin olmasına ve aynı ada sahip sınıfta sanal özniteliklere sahip olmasına izin verir (örnek için bkz. Enum).
Yeni sürüm 3.4.
Görünüşe enum module kullanılır:
# DynamicClassAttribute is used to provide access to the `name` and
# `value` properties of enum members while keeping some measure of
# protection from modification, while still allowing for an enumeration
# to have members named `name` and `value`. This works because enumeration
# members are not set directly on the enum class -- __getattr__ is
# used to look them up.
@DynamicClassAttribute
def name(self):
"""The name of the Enum member."""
return self._name_
@DynamicClassAttribute
def value(self):
"""The value of the Enum member."""
return self._value_
Ben enums are a little special ama bu DynamicClassAttribute
ilgilidir anlamıyorum biliyoruz. Bu özniteliklerin dinamik olduğu, bunun normal bir özellikten farkı nedir ve DynamicClassAttribute
avantajımı nasıl kullanırım?