Dynamic Class Creation

- 1. Understanding Python Classes
- 2. Dynamic Class Creation
- 3. Invisible Metaclasses In Python
- 4. Metaclasses In Python
- 5. namespace['attr'] = 1
- 6. Logging Namespace
- 7. Meta Classes Without Type
- 8. More Accurate Meta Classes Without Type
- 9. Run Methods Order In Python
- 10. Run Methods Order In Python With More Explanation
- 11. Register Classes in Python
- 12. Singleton in Python
- 13. Modeling a Class with a Metaclass
- 14. Define Method If Condition True
Dynamic Class Creation
class anahtar kelimesi sözdizimsel bir kolaylıktan ibarettir. Python bunu sahne arkasında type(name, bases, namespace) çağrısına dönüştürür. Aşağıdaki iki tanım tamamen aynı sınıfı üretir:
class Example:
attr = 1
def method(self):
return "method"
name = "Example"
bases = ()
namespace = {
"attr": 1,
"method": lambda self: "method"
}
Example = type(name, bases, namespace)
print(f"{Example.__class__=}") # <class 'type'>
print(f"{Example().attr=}") # 1
print(f"{Example().method()=}") # 'method'assert isinstance(Example, type)
assert isinstance(Example(), Example)Üç Argüman
type(name, bases, namespace) çağrısında:
name— sınıfın adı (__name__niteliğine yazılır).bases— miras alınan sınıfların demeti; boş demetobject’ten türetmek anlamına gelir.namespace— sınıf gövdesindeki tüm atamaları içeren sözlük: nitelikler, metodlar,__module__,__qualname__vb.
Neden Önemli?
Dinamik sınıf oluşturma; sınıf adlarını veya niteliklerini çalışma zamanında belirlemeniz gereken durumlarda kullanışlıdır — örneğin bir ORM’nin tablo tanımlarını kod üretirken, ya da bir plugin sisteminde eklentileri kayıt altına alırken. Metaclass’ları anlamanın ilk adımı da budur: metaclass, type’ın yerine geçen ve bu type(name, bases, namespace) çağrısını kontrol eden bir sınıftır.
Hakan Çelik
