Python metaclasses karıştığı bir ezoterik sorum var. İstemci tarafı proxy'leri aracılığıyla rasgele Python sınıflarına erişmeyi kolaylaştıracak web-sunucu tarafı kodu için bir Python paketi oluşturuyorum. Proxy üreten kodum, API'mize eklemek istediğim tüm Python sınıflarının bir kataloğuna ihtiyaç duyuyor. Bu kataloğu oluşturmak için, sınıf oluşturma sürecine bir kanca koymak için __metaclass__
özel özniteliğini kullanıyorum. Özellikle, "yayımlanan" API sınıflarının tüm kendisi grup oluşturma ilgili bilgileri kaydetmek üzere ayarlanmış olan bir __metaclass__
sahip belirli bir temel sınıf, PythonDirectPublic
, alt sınıf olacak. Şimdiye kadar çok iyi. Karmaşık olduğu yerde, PythonDirectPublic
'un kendisinin bir üçüncü taraf sınıfından (enthought.traits.api.HasTraits
) miras almasını istiyorum. Bu üçüncü taraf sınıfı da bir __metaclass__
kullanır.Python: metaclasses o kadar uzağa
Yani iki metaclasses yönetmenin doğru yolu nedir? Meta sınıfım Enthought'ın meta sınıfının bir alt sınıfı mı olmalı? Ya da geri döneceğim tip nesnesini almak için, metaclassın __new__
yöntemimin içerisindeki Enthought metaclass'ını çağırmalı mıyım? Ya da bu özel durumda kullanmak için başka bir mistik kâhin var mı?
ben o belirli yöntem üzerinde herhangi bir belge bulamıyorum. HasTraits.trait_subclasses() kullanarak öneriyor musunuz? Bu, gerçekten de kataloğu oluşturmaya alternatif bir yaklaşım sağlayabilirdi. Dan Ellis aslında '__subclasses__' yöntemi ifade eder inanıyoruz –
@DanMenes, nasıl kullanılacağını için [Bu cevap] (http://stackoverflow.com/a/3862957/396967) bakınız. – kynan
@kynan Anladım. Bence bu da işe yarayacaktı. Bu koda baktığımdan birkaç sene olmasına rağmen, bütün kırışıklıkları hatırlamıyorum. –