Number'a bakın. Nesnenin sınıfının esnek olmasını istiyorlar. __init__
tarafından sağlanamayan Number(...) => Int/Float/...
.
Dahası
__init__
__new__
savlarını alacağı ancak, orijinal argümanlara ihtiyaç
matexpr.py bakın veya bunları
__new__
zaten (örneğin
for __reduce__
için) yaptıklarından adapte edilmesi gerekmez.
Nesnelerin çoğu kendi __slots__
'u tanımlar, böylece onlara atanabilecek sabit öznitelikler vardır. Atama, __new__
ve __init__
'da yapılabilir. Ben sadece yeni bir __init__
açmak ve başka bir işlem yapmak için açmaya gerek görmüyorum - Martijn Pieters ve user4815162342 [source] işaret nesneler değişmez. Sınıfa değiştirmek Bazen __init__
değil, bir veya iki kez denir
: hatam varsa
class X(object):
def __new__(self): # sorry but self is the class I apologize!
obj = object.__new__(Y)
return obj
def __init__(self):
print 1
>>> class Y(object):
def __init__(self):
print 2
>>> X() # no __init__ call, limiting you to stay in the class hierarchy
<__main__.Y object at 0x7f287e769350>
>>> class Y(X):
def __init__(self):
print 2
>>> X() # one __init__ call
2
<__main__.Y object at 0x7f287e7693d0>
>>> class X(object):
def __new__(self):
obj = Y()
return obj
def __init__(self):
print 1
>>> class Y(X):
def __new__(self):
return object.__new__(self)
def __init__(self):
print 2
>>> X() # __init__ called twice, structure copied from number.py
2
2
<__main__.Y object at 0x7f287e7692d0>
beni düzeltin. Bu cevap tamamlandığında sanmıyorum ama bunlar Martijn Pieters'e bahsettiği ve 2 downvotes cevabı silmek için user4815162342 [source]
Waiting olarak nesneleri değişmez olması gerektiğini ilave olarak __init__
kullanmamayı motive değer bulundu komplikasyonlardır.
Sanırım hepsi değişmez olmalıydılar? –
@MartijnPieters - Daha önce a.la anma çalışmaları yapılmış olan işleri yeniden yapmaktan kaçınmak için bunların yıkanabilir olması gerektiğine inanıyorum. – mgilson
Sadece tarihi bir kaza olabilir; Daha eski versiyonlar (ör. 0.5.x), belki de haklı görüldüğü önemli ölçüde daha karmaşık bir yapıya sahiptir. – ecatmur