Mam klasy, która ma wiele cech, które są związane, na przykład:W obiekcie klasy, jak atrybuty automatycznej aktualizacji?
class SomeClass:
def __init__(self, n=0):
self.list = range(n)
self.listsquare = [ x**2 for x in self.list ]
Jeśli zrobię obiekt normalnie, że nie ma problemu, z
a = SomeClass(10)
będę się 2 listy, a.list
i a.listsquare
.
Teraz, jeśli chcę złożyć pusty obiekt pierwszy i przypisać jeden atrybut do niej, chcę inne atrybuty mają być automatycznie aktualizowane, na przykład jeśli robię
b = SomeClass()
b.list = range(5,10)
Chcę b.listsquare
być automatycznie zaktualizowane, a także na odwrót (przypisz b.listsquare
i automatyczną aktualizację b.list
). czy to możliwe? Czy klasy jest właściwym wyborem?
Dziękuję wszystkim, ale jestem całkowicie przytłoczony wszystkimi odpowiedziami. Czy ktoś może dać kompletne rozwiązanie, abym mógł się nauczyć pisać sam?
chciałbym osiągnąć klasę Foo
z 3 atrybutami length
, list
i listsquare
takie, że:
- Jeśli robię
a = Foo(3)
, mama.length = 3
,a.list = [0, 1, 2]
,a.listsquare = [0, 1, 4]
. - Jeśli wykonam
b = Foo().list = [5, 6]
, otrzymamb.length = 2
,b.listsquare = [25, 36]
. - Jeśli wykonam
c = Foo().listsquare = [4, 9]
, otrzymamc.length = 2
,c.list = [2, 3]
.
Kod dałeś nam nie działa. klasy są definiowane przez "class", a nie "def" i są inicjalizowane za pomocą metody "def __init __ (self, ...)". Użytkownik zdefiniował funkcję z 1 wymaganym parametrem o nazwie "self" i 1 opcjonalnym parametrze "n". Kiedy wywołasz SomeClass (10), funkcja próbuje przypisać "list" do obiektu 10 i nie powiedzie się. - oh, wygląda na to, że pytanie jest ponownie formatowane ... więc nieważne. – tdelaney
Przepraszam, wprowadziłem poprawki. Nie jestem w tej chwili dobrze zaznajomiony. – LWZ