SORU
16 Aralık 2008, Salı


Python Kullanarak ____ getattribute metodu

Bir sınıf içinde bir değişken için erişim geçersiz kılar, ama diğer normal olarak dönmek istiyorum. Nasıl __getattribute__ I bunu?

Aşağıdaki denedim de yapmaya çalıştığım şey göstermek gerekir) ama özyineleme bir hata alıyorum:

class D(object):
    def __init__(self):
        self.test=20
        self.test2=21
    def __getattribute__(self,name):
        if name=='test':
            return 0.
        else:
            return self.__dict__[name]

>>> print D().test
0.0
>>> print D().test2
...
RuntimeError: maximum recursion depth exceeded in cmp

CEVAP
16 Aralık 2008, Salı


Aynı işlevi dediğin için özyineleme bir hata alıyorum, 5**. Eğer object'__getattribute__ yerine, işe yarar: . kullanırsanız

class D(object):
    def __init__(self):
        self.test=20
        self.test2=21
    def __getattribute__(self,name):
        if name=='test':
            return 0.
        else:
            return object.__getattribute__(self, name)

Bu object (Bu örnekte) temel sınıf olur. __getattribute__ temel sürüm arayarak daha önce olduğunu özyinelemeli cehennem kaçının.

Foo.py: kod ile İpython çıktı

In [1]: from foo import *

In [2]: d = D()

In [3]: d.test
Out[3]: 0.0

In [4]: d.test2
Out[4]: 21

Güncelleme:

Bölümü tam olarak bunu tavsiye ediyorlar nerede geçerli belgeler More attribute access for new-style classes başlıklı sonsuz özyineleme önlemek için bir şey var.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • jbignacio

    jbignacio

    13 Mart 2006
  • super1988guy

    super1988guy

    9 Aralık 2007
  • tychoadragmire

    tychoadragmi

    20 Mart 2006