2009-06-08 14 views
6

Diyelim ki, ekstra özellik eklemek istediğim bir Python sınıfım var.Python'da yama sınıfları

import path.MyClass 
setattr(MyClass, 'foo', bar) 

:

import path.MyClass 
MyClass.foo = bar 

ve benzeri kullanılarak şey arasında fark var mıdır?

Değilse, neden insanlar ilkinden ziyade ikincisi yaparlar? (. Örneğin burada http://concisionandconcinnity.blogspot.com/2008/10/chaining-monkey-patches-in-python.html) (. Eğer öznitelik adı için bir değişken kullanabilirsiniz setattr ile)

+1

Neden sınıfın tanımını ek yöntemle güncelleştirmiyorsunuz? Sınıf tanımını basitçe düzenleyebildiğiniz tüm bu "sihirli" şeyleri neden yapıyor? –

+0

Bu soruyu sorduğumda, sorun, değiştirmek istemediğimiz bir kütüphaneden geliyordu; ve bunu alt sınıfta tutamadık. Genel olarak kabul etseler de. – interstar

cevap

11

ifade eşdeğerdir, ancak ikisinin en dinamik seçimdir çünkü setattr kullanılabilecek

bakınız: http://docs.python.org/library/functions.html#setattr

+0

Anlaşmalı. Özellikle, bu, OP'nin atıfta bulunulan blog girişinde düzeltme yapılmasının gerekeceği anlamına gelecekti - yöntemin adı, monkeypatch yönteminin içgüdüsü tarafından bilinmiyordu. –

+0

teşekkürler. Ama soruyu güncelledim çünkü hala birisinin diğer – interstar

+0

ah'den daha dinamik olduğunu görmüyorum ... hayır, ne demek istediğimi görüyorum ... üzgünüm ... doh! – interstar

İlgili konular