Mam klasę Foo z metodą isValid. Następnie mam pasek metod(), który odbiera obiekt Foo i którego zachowanie zależy od tego, czy jest poprawne czy nie.Jaki jest najbardziej ogólny typ python, do którego mogę dodać atrybuty?
Do testowania tego, chciałem przekazać obiekt do paska, którego metoda isValid zawsze zwraca wartość False. Z innych powodów nie mogę utworzyć obiektu Foo w czasie testowania, więc potrzebowałem obiektu do sfałszowania go. Najpierw pomyślałem o stworzeniu najbardziej ogólnego obiektu i dodanie do niego atrybutuValid, aby użyć go jako Foo. Ale to nie do końca pracy:
>>> foo = object()
>>> foo.isValid = lambda : False
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'object' object has no attribute 'isValid'
I okazało się, obiekt nie posiada __dict__
, więc nie można dodać atrybutów do niego. W tym momencie, obejście używam jest stworzenie typ w locie w tym celu, a następnie tworząc obiekt tego typu:
>>> tmptype = type('tmptype',(), {'isValid' : lambda self : False})
>>> x = tmptype()
>>> x.isValid()
False
Ale to wydaje się zbyt długi strzał. Musi istnieć jakiś ogólnie dostępny rodzaj, który mógłbym użyć do tego celu, ale który?
Cóż, w zasadzie to samo jest rozłożone na więcej linii iz nową klasą stylu. Ale moje pytanie wciąż trwa: czy nie ma jakiegoś ogólnie dostępnego rodzaju, aby osiągnąć ten sam cel? Coś jak obiekt z __dict__? Czy naprawdę muszę stworzyć typ tylko do tego? – ricab
@ricab: Oto odrzucenie idei, którą właśnie ściągnąłem google. Możesz znaleźć innych. http://mail.python.org/pipermail/python-bugs-list/2007- January/036866.html – aaronasterling
Oh, ok, więc nie ma takiego typu. Chociaż prawdopodobnie po prostu tęskniłem za tym ... Dzięki – ricab