Python 3.4'te, float
alt sınıfını oluşturmak istiyorum; bu, float
gibi matematik ve boolean işlemlerinde kullanılabilen, ancak başka özel işlevlere sahip olan ve bu işlevselliği denetleyen başlatma sırasında bir argüman alabilir. (Özellikle, özel bir __str__
ve bu yöntemde kullanılan bir parametre olmasını istedik.)Python: Floatın bir alt sınıfı yapıcısında ekstra argümanlar alabilir mi?
Ancak, fonksiyonel iki argüman yapıcı olması float
bir alt sınıfını almak gibi olamaz. Niye ya? Bu, yerleşik türlerin genişletilmesiyle ilgili bir sınırlama mıdır?
Örnek: Şimdi
class Foo(float):
def __init__(self, value, extra):
super().__init__(value)
self.extra = extra
Ben Foo(1,2)
çalışırsanız alıyorum: Ben Foo(1)
yaparsam olsun
TypeError: float() takes at most 1 argument (2 given)
Hayret, benim yeni __init__
'ın argümanları da uygulanır:
TypeError: __init__() missing 1 required positional argument: 'extra'
Buradaki anlaşma nedir? Ben list
alt tipleriyle benzer şeyler yaptım ve float
üzerinde çalışmadı şaşırdı.
İlgili: http://stackoverflow.com/questions/1936457/sub-classing-float-type-in- piton-başarısız-to-catch-in-init istisna- –
değil sorunuzun cevabını ancak soruna bir çözüm: http://ideone.com/nIPim9 –
ilginç, Robᵩ @. İstediğimi yapmanın yolu olabilir '__new__' gibi görünüyor ama tam olarak bu işi nasıl yapacağınızdan emin değilim. –