Rozważmy następujące klasy:Controlling getter i setter dla klasy A Pythona
class Token:
def __init__(self):
self.d_dict = {}
def __setattr__(self, s_name, value):
self.d_dict[s_name] = value
def __getattr__(self, s_name):
if s_name in self.d_dict.keys():
return self.d_dict[s_name]
else:
raise AttributeError('No attribute {0} found !'.format(s_name))
W moim kodu Reklamowe mieć jakąś inną funkcję (jak get_all() zwracają wich d_dict, ma (s_name), który mi powiedzieć, czy mój żeton ma określony atrybut).
W każdym razie myślę, że jest to usterka w moim planie, ponieważ to nie działa: kiedy tworzę nowe wystąpienie, python próbuje zadzwonić pod numer __setattr__('d_dict', '{}')
.
W jaki sposób mogę osiągnąć podobne zachowanie (być może w bardziej pythonic?) Bez konieczności pisania czegoś takiego jak Token.set (nazwa, wartość) i otrzymania (nazwa) każdego, który chcę ustawić lub uzyskać atrybut dla znak.
Krytycy o projektowaniu wada i/lub głupoty mile widziane :)
podziękowaniem!
Myślę, że to zrobię :) W każdym razie używam Python 3.1, więc wszystkie moje klasy są w nowej klasie. – thomas