SORU
6 EYLÜL 2009, Pazar


____ İnit() ana sınıfı's ____init çağrısı()?

Objective-C dilinde bu yapı var alışkınım:

- (void)init {
    if (self = [super init]) {
        // init class
    }
    return self;
}

Python da __init__ üst sınıf uygulaması aramalı?

class NewClass(SomeOtherClass):
    def __init__(self):
        SomeOtherClass.__init__(self)
        # init class

Bu da doğru/__new__() __del__() için yanlıştır?

Düzenleme:Çok benzer bir soru var: Inheritance and Overriding __init__ in Python

CEVAP
6 EYLÜL 2009, Pazar


Bir şeye ihtiyacın olursa süper __init__ yapılacak ek olarak ne yapılmakta mevcut sınıf __init__, çağırmanız gerekir Kendin beri olmaz otomatik olarak. Ama eğer süper bir şeye ihtiyacın olursa ... __init__, hayır aramak lazım. Örnek:

>>> class C(object):
    def __init__(self):
        self.b = 1


>>> class D(C):
    def __init__(self):
        super().__init__() # in Python 2 use super(D, self).__init__()
        self.a = 1


>>> class E(C):
    def __init__(self):
        self.a = 1


>>> d = D()
>>> d.a
1
>>> d.b  # This works because of the call to super's init
1
>>> e = E()
>>> e.a
1
>>> e.b  # This is going to fail since nothing in E initializes b...
Traceback (most recent call last):
  File "<pyshell#70>", line 1, in <module>
    e.b  # This is going to fail since nothing in E initializes b...
AttributeError: 'E' object has no attribute 'b'

__del__ aynı şekilde, (ama sonuçlanması için __del__ güvenmek konusunda dikkatli olun ile deyimi ile yapmak yerine düşünün).

Ben __init__. tüm başlatma yapıyorum nadiren __new__. kullanın

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Kassem G

    Kassem G

    25 EKİM 2006
  • majesticdubstep

    majesticdubs

    3 Kasım 2011
  • SignatureSeries

    SignatureSer

    24 Aralık 2006