türünde class A
türünde bir nesneye sahip olduğumuzu varsayalım. İkinci bir class B(A)
tanımladık. Nesne k
nesnesini class B
'a dönüştürmek ve k
'daki tüm verileri korumak için en iyi uygulama nedir?Python nesne dönüşümü
cevap
Bu "sınıf dönüşümü" yapar ama tali hasar tabidir. Başka bir nesne oluşturmak ve BrainCore'un yayınladığı __dict__
'u değiştirmek daha güvenli olacaktır - ancak bu kod, yeni bir nesne oluşturulmadan istediklerinizi yapar.
class A(object):
pass
class B(A):
def __add__(self, other):
return self.value + other
a = A()
a.value = 5
a.__class__ = B
print a + 10
a = A() # parent class
b = B() # subclass
b.value = 3 # random setting of values
a.__dict__ = b.__dict__ # give object a b's values
# now proceed to use object a
Bu kullanım durumunuzu tatmin eder miydi? Not: Sadece b'nin örnek değişkenlerine, class B sınıfı değişkenleri değil, a nesnesinden erişilebilir. Eğer bir deepcopy yapmadıkça Ayrıca, içinde modifiye değişkenler, b değişkeni değiştirir:
import copy
a.__dict__ = copy.deepcopy(b.__dict__)
Aslında, hiçbir değişken kopyalanmayacak. 'A' ve' b' artık her ikisi de aynı '__dict__' paylaştığından,' a.value 'değerini ayarlamak' b.value' da değiştirir. –
Haklısın, düzeltildin, teşekkürler. – BrainCore
Aslında bunu yaparken, "bir" nesne hemen imha edilmelidir. Öte yandan, aynı öznitelikleri paylaşan farklı sınıflardaki iki farklı nesne ile sonuçlanır - bundan daha az kötü senaryo vardır. (Etkileşimli komutta bile oynamak korkutucu) – jsbueno
- 1. bahar önyükleme rabbitmq MappingJackson2MessageConverter özel nesne dönüşümü
- 2. Dizi listesinin json nesne dizesine dönüşümü
- 3. HSV2BGR dönüşümü Python OpenCV betiğinde başarısız oluyor
- 4. Telegram bot güncellemeleri python dict dönüşümü
- 5. Nesne kimliğini Python
- 6. Python UnitTest ve nesne başlatma
- 7. -ms-dönüşümü
- 8. Python - neden yeni bir nesne örneği oluşturmuyor?
- 9. Python AttributeError:. 'UI_MainWindow' nesne hiçbir özelliği
- 10. Python - bir nesne kendi türü olabilir?
- 11. e-posta adresine nesne ekleme python 3
- 12. Python 3: Nesne nasıl bir örnek olabilir?
- 13. Dinamik nesne adıyla python nesnelerine nasıl erişilir?
- 14. VSS anlık geçişlerinde CSS dönüşümü dönüşümü varsayılan boyuta dön
- 15. Python'da Kısa Süreli Fourier Dönüşümü
- 16. Bir XSL Dönüşümü
- 17. T4 derleme derleme dönüşümü
- 18. awk 2 perl dönüşümü
- 19. Json - AVR dönüşümü
- 20. aritmetik işlecine dönüşümü dönüştürme
- 21. pytz utc dönüşümü
- 22. Uzaklık dönüşümü .NET
- 23. Not Defteri'nde EOL dönüşümü ++
- 24. Tarih Saat Dönüşümü
- 25. R: seyrek matris dönüşümü
- 26. LPCTSTR dönüşümü için CString
- 27. SQL, milisaniye dönüşümü
- 28. Android'de yanlış HSV dönüşümü
- 29. C++ beklenmedik implict dönüşümü
- 30. SPARQL tarih dönüşümü
Hangi yolla birinden diğerine dönüştürmeyi düşünüyorsunuz? Sınıf B nesnesinin tüm üye değişkenlerini tutmak istiyor musunuz, ancak A sınıfı sınıflar yöntemini kullanın? – BrainCore
Bu Pretty Poor Polimorfizm mi? Ortak bir süper sınıfın A ve B alt sınıfları mı? Eğer öyleyse, bu yanlış bir şey mi? A'nın B ile aynı yöntemlere sahip olmasını ister misiniz? Bu çoklu kalıtım yoluyla yapılır. Lütfen neden buna ihtiyacınız olduğunu düşündüğünüzü açıklayın, çünkü - Python'da - dönüşüm veya döküm işlemine ihtiyacınız olduğunu düşünüyorsanız, yanlış yapıyorsunuz demektir. –
Ayrıca kullanım durumunuzu gerçekten merak ediyorum. Bu sadece eğlenmek için mi, yoksa klasik polimorfizmden başka bir problemle karşılaşmanın daha iyi bir yolu olduğunu mu buldunuz? –