() süper yükseltir "eğer data: tür, değil classobj" yeni tarzı sınıf için olmalı
super()
aşağıdaki kullanın eğer data yükseltir: neden?
>>> from HTMLParser import HTMLParser
>>> class TextParser(HTMLParser):
... def __init__(self):
... super(TextParser, self).__init__()
... self.all_data = []
...
>>> TextParser()
(...)
TypeError: must be type, not classobj
StackOverflow benzer bir soru var: hata kullanıcı sınıfı yeni tarzı bir sınıf değil bu gerçeği ile açıklanabilir python super() raises TypeError ! Why?,. Ancak, sınıf yukarıda object
devralan yeni tarzı bir sınıf.:
>>> isinstance(HTMLParser(), object)
True
Neyi kaçırıyorum? Nasıl super()
, burada kullanabilir miyim?
super(TextParser, self).__init__()
yerine HTMLParser.__init__(self)
kullanarak çalışacak, ama eğer data anlamak istiyorum.
PS: Joachim tarzı yeni bir sınıf örneği object
olmakla eşdeğer olmadığını belirtti. Karşısında birçok kez, bu yüzden karışıklık (object
örnek testine göre tarzı yeni bir sınıf örnek test, örnek:* *34) okudum.
CEVAP
Pekala, her zamanki gibi "super()
eski tarz bir sınıf ile kullanılamaz".
Ancak, önemli olan nokta budoğru test"bu yeni tarzı vardırörnek(nesne yani?"
>>> class OldStyle: pass
>>> instance = OldStyle()
>>> issubclass(instance.__class__, object)
False
ve değil (soru olarak):
>>> isinstance(instance, object)
True
İçinsınıflardoğru "yeni tarzı bu bir sınıf" test:
>>> issubclass(OldStyle, object) # OldStyle is not a new-style class
False
>>> issubclass(int, object) # int is a new-style class
True
çok önemli bir noktatarzı eski sınıflarla yanisınıfbir örneği veyazınfarklıdır. Burada, OldStyle().__class__
type(OldStyle())
instance
tip ise object
, mirasçı olmayan OldStyle
,,yokobject
devralır. Temelde, eski tarz bir sınıf sadece tür nesneleri instance
(yeni tarzı ise sınıfta sınıfın kendisi olan nesneleri oluşturur) oluşturur. Bu OldStyle()
object
bir neden olabilir: object
(kendi sınıf gerçeğini de göz ardı . type()
devralır ^em>değilobject
miras sayılmaz: eski tip sınıflar sadece yazın yeni nesneler instance
yapı). Kısmi referans: http://stackoverflow.com/a/9699961/42973.
Fark da görülebilir: PS:
>>> type(OldStyle) # OldStyle creates objects but is not itself a type
classobj
>>> isinstance(OldStyle, type)
False
>>> type(int) # A new-style class is a type
type
(eski tip sınıflardeğilörneklerini türü) edemezler türleri.
Çözmek için nasıl "Eklenti yürütm...
Bu ne anlama geliyor? &;'NSUnknow...
Sabitleme "kesme şu anda hit olac...
&; Zincirleri " eğer önlemek için nası...
E çift kolon " ne anlama geliyor;::&qu...