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 InnerClass
outer_var
.
Bunu yapmanın bir yolu var mı?
CEVAP
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.)
Neden Python Soyut Temel Sınıfları kul...
Python: verilen sınıf hiyerarşisi için...
'in Python kapsam' döngüler...
Kapsam hata Python değişken...
Nasıl Python geçerli modül içerisindek...