Mike'ın ve Alex'in tavsiyelerini daha fazla yansıtıyor ve kendi rengimi ekliyor ...
Örnek niteliklerini kullanmak tipiktir ... daha deyimsel Python. Sınıf öznitelikleri, kullanım durumları spesifik olduğu için pek kullanılmaz. Aynısı statik ve sınıf yöntemleri ile "normal" yöntemler için de geçerlidir. Belirli kullanım durumlarına hitap eden özel yapılardır, aksi takdirde, Python programlamasının belirsiz bir köşesini bildiklerini göstermek isteyen sapkın bir programcı tarafından oluşturulan koddur.
Alex cevabında, bir arama seviyesinin daha az olması nedeniyle erişimin (biraz) daha hızlı olacağından söz ediyor ... Bunun nasıl çalıştığını henüz bilmeyenler için daha fazla açıklama yapmama izin verin. Değişken erişime çok benzer - arama sırası şu şekildedir:
- yerliler
- nonlocals
- globaller
- Yerleşik ins
Öznitelik erişimi için sıra şu şekildedir:
- örnek
- sınıf
- MRO tarafından belirlenen temel sınıflar (yöntem çözümleme sırası)
Her iki teknik de "içten dışa" bir şekilde çalışır, yani çoğu yerel nesneler önce kontrol edilir, ardından dış katmanlar sırayla kontrol edilir.
Yukarıdaki örneğinizde, path
özelliği aradığınızı varsayalım. self.path
Python, " " gibi bir referansla karşılaştığında , bir eşleşme için önce örnek özniteliklerine bakacaktır. Başarısız olduğunda, nesnenin somutlaştırıldığı sınıfı kontrol eder. Son olarak, temel sınıfları arayacaktır. Alex'in belirttiği gibi, özniteliğiniz örnekte bulunursa, başka bir yere bakmasına gerek yoktur, dolayısıyla biraz zaman tasarrufu sağlarsınız.
Ancak, sınıf özniteliklerinde ısrar ediyorsanız, bu fazladan aramaya ihtiyacınız var. Veya , diğer alternatifiniz nesneye örnek yerine sınıf aracılığıyla başvurmaktır, örneğin MyController.path
yerine self.path
. Bu, ertelenmiş aramadan geçecek doğrudan bir aramadır, ancak aşağıda alex'in bahsettiği gibi, bu global bir değişkendir, yani kurtaracağınızı düşündüğünüz kısmı kaybedersiniz ([global] sınıf adına yerel bir referans oluşturmadıkça ).
Sonuç olarak, çoğu zaman örnek niteliklerini kullanmanız gerekir. Ancak, sınıf niteliğinin iş için doğru araç olduğu durumlar olacaktır. Her ikisini de aynı anda kullanan kod en fazla özen gerektirir, çünkü kullanmak self
size yalnızca örnek öznitelik nesnesini ve aynı adın sınıf özniteliğine gölge erişimini sağlar. Bu durumda, özniteliğe başvurmak için sınıf adına göre erişmeyi kullanmanız gerekir .