SORU
19 Kasım 2009, PERŞEMBE


Python yuvalanmış sınıfları kapsam

Python ile iç içe sınıflarda kapsamını anlamaya çalışıyorum. İşte benim örnek kod :

class OuterClass:
     outer_var = 1
     class InnerClass:
           inner_var = outer_var

Sınıf oluşturma işlemi ve bir hata alıyorum :

<type 'exceptions.NameError'>: name 'outer_var' is not defined

inner_var = Outerclass.outer_var çalışıyor çalışmıyor Anlıyorum :

<type 'exceptions.NameError'>: name 'OuterClass' is not defined

Statik erişmeye çalışıyorum InnerClassouter_var. Bunu yapmanın bir yolu var mı?

CEVAP
19 Kasım 2009, PERŞEMBE


class Outer(object):
  outer_var = 1

  class Inner(object):
    @property
    def inner_var(self):
      return Outer.outer_var

Bu benzer şeyler diğer dillerde çalışma, ve genel arama kullanır outer_var erişim kapsamı yerine eskisi gibi değil. Eğer Outer bağlı olduğu nesne adı ne değiştirirseniz (bu kod yürütülür sonraki nesne kullanır.)

Senin yerine Inner tüm nesneler outer_var gerçekten bir örneği olduğu için Outer nitelik: bir başvuru olmasını istiyorsanız

class Outer(object):
  def __init__(self):
    self.outer_var = 1

  def get_inner(self):
    return self.Inner(self)
    # "self.Inner" is because Inner is a class attribute of this class
    # "Outer.Inner" would also work, or move Inner to global scope
    # and then just use "Inner"

  class Inner(object):
    def __init__(self, outer):
      self.outer = outer

    @property
    def inner_var(self):
      return self.outer.outer_var

İç içe sınıflar Python nadir değildir, ve otomatik olarak sınıflar arasındaki özel ilişkinin herhangi bir tür anlamına gelmez unutmayın. Yuvalama değil daha iyidir. (Yine de eğer isterseniz İç Dış bir Sınıf özniteliği ayarlayabilirsiniz.)

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ghosti66

    ghosti66

    27 AĞUSTOS 2006
  • RayperEnglishKnight

    RayperEnglis

    24 Kasım 2008
  • REK Roth Productions

    REK Roth Pro

    8 Ocak 2011