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

  • JonnyEthco

    JonnyEthco

    5 EKİM 2006
  • newreleaseblitz

    newreleasebl

    13 Ocak 2010
  • VvCompHelpvV

    VvCompHelpvV

    4 EYLÜL 2007