Python 3.7’deki yepyeni bir özellik “Data Classes” dır. “Data Classes” , birden fazla özellik barındıran sınıflar için klişe kod üretimini otomatikleştirmenin bir yoludur.
Ayrıca Python 3’ün yeni tür etiketlerini kullanmanın avantajını da taşıyorlar.
“Data Classes” Python 3.7’deki standart kitaplık içindeki “dataclasses” yeni veri sınıfları modülü ile sağlanır ve ihtiyacınız olacak 2 önemli şey içerir.
Varsayılan ayarla, herhangi bir dataclass init, repr, str ve eq komut yordamlarını sizin için uygulayacak.
init yordamı, sınıfta belirtilen aynı tip açıklamalarla anahtar sözcük ifadelerine sahip olacak.
The eq yordamı, tüm dataclass özniteliklerini sırayla karşılaştıracaktır.
Sınıfın üst kısmında gösterilen tüm alanlar ve tip gösterimi gereklidir.
SimpleDataObject(field_a=1, field_b=’b’) |
True |
Bu init yordamı (field_a: int, field_b: str) -> None şeklinde bir tanımlayıcıya sahip olabilir. Bunu sadece
yazarak görebilirsiniz.
Quite importantly, the type hints are merely hints. So giving the wrong types doesn’t issue a warning or attempt a conversion.
Because type hinting is required (otherwise the field is ignored), if you don’t have a specific type, use the Any type from the typing module.
SimpleDataObject(field_a=’a’, field_b=’b’) |
The dataclass decorator has a frozen argument, which is False by default. If specified, fields will be “frozen”, ie read-only and if eq is set to True, which it is by default then the hash magic will be implemented and object instances will be hashable so you can use them as dictionary keys or within a set.
{ImmutableSimpleDataObject(field_a=2, field_b=’c’), ImmutableSimpleDataObject(field_a=1, field_b=’b’)} |
The core type in dataclasses is the Field type, which belongs to a dataclass.
By default, just setting a class attribute will instantiate a Field on your class as shown in previous examples.
If you need to customise the behaviour, you can use the field factory inside the dataclasses module.
The parameters to field() are:
default: If provided, this will be the default value for this field. This is needed because the field call itself replaces the normal position of the default value. default_factory: A 0-argument callable that will be called when a default value is needed for this field. init: Included as a parameter to the generated init method. repr: Included in the string returned by the generated repr method. compare: Included in the generated equality and comparison methods (eq, gt, et al.). hash: Included in the generated hash method. There is also another argument, metadata which is not in use yet.
Similar to keyword arguments, fields with default values must be declared last.
Demonstrating the default factory argument,
Öncesinde oluşturulan init sonrasında işleyen post_init yordamını bildirebilirsiniz.
|Kalıtım beklediğiniz gibi çalışır. (Temel ve Miras alınan) sınıf tanımları için sınıfları -dataclass- veri sınıfına sarmanız gerekir.
SimpleBaseObject(field_0=’c’) |
Mevcut bir alandan sonra mevcut olmayan bir alan bildiremeyeceğiniz için, mevcut(field 0) ve mevcut olmayan alanları(field a, field b), temel ve alt sınıflar arasında dağıtımazsınız.
Point(x=1.5, y=2.5, z=0.0) |