Przegląd:zagnieżdżone obiekty i setattr & getattr (tak, to ten czas)
class Inner(object):
def __init__(self, x):
self.x = x
class Outer(object):
def __init__(self, z):
self.inner = Inner(z)
o = Outer(10)
Teraz chcę zewnętrzna obiektu zachowywać się w sposób przejrzysty - żadnych atrybutów ustawionych na o
powinien być ustawiony na o.inner
, sam dla odczyt: o.something
powinien powrócić, w rzeczywistości, wartość o.inner.sommething
. Trochę jak proxy lub przekaźnik.
__getattr__
dla Outer
wydaje się prosta & prace:
def __getattr__(self, item):
return getattr(self, item)
Jak sobie radzić __setattr__
? Nie mogłem wymyślić niczego, co nie powodowałoby błędu rekursji i sprawiało, że nienawidziłem siebie.
A może sama koncepcja jest wadliwa?
(Innym podejściem Próbowałem robił Outer
podklasa Inner
- to naprawdę nie grać estetycznie obecny @classmethods
, nie wspominając IDE by zgubić wewnątrz tych. - nie jest w stanie rozwiązać pewne atrybuty Zostawmy że na razie, być może?)
Czy chodziło Ci o 'self.inner = Inner (z)'? Czy twoja metoda getattr zwraca dane z Inner()? Sposób, w jaki jest napisany, wygląda na to, że odnosi się tylko do Outera. – gfortune
Tak - wraca. Naprawiono oba, dzięki! – ntl0ve