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ş:
Python kullanarak bir dosya var olup o...
Renkleri kullanarak Python ile termina...
Nasıl rastgele bir liste Python kullan...
Sözlükler Python for döngüleri kullana...
Neden Python karşılaştırma dizeleri ku...