Automatyczne tworzenie objektów, np. w pętli

0

Witam.
Ma się teraz dużo czasu więc zabrałem się za naukę Pythonga ;-D

Próbuję ogarnąć programowanie objektowe.
Czy jest możliwość tworzenia obiektów w pętli jeśli ma być ich większa liczba.
np tak:

class Obj():
  def f(self):
    pass

for a in range(9):
   Obj()

ale z automatycznym nadaniem nazw objektów, i bez umieszczania objektów w liście, np:


for a in range(9):
   a=Obj()

Niby tworzy, ale jak wywołać później funkcje zawartą w objekcie?
Ręcznie można tak:
nr1=Obj()
a=nr1
a.f()
I to działa. Ale jak to zautomatyzować.

Pozdrawiam
Radek

PS: Przepraszam za ew. głupoty, ale dopiero się wdrażam. Czytam i czytam, ale to wciąż mało. Oczywiście szukałem może źle więc proszę o ew. wskazanie wątku do poczytania.

0
Radosław Głębicki napisał(a):

ale z automatycznym nadaniem nazw objektów,

Pachnie jak XY problem. Jaki naprawdę "życiowy" cel chcesz rozwiązać?
Często pytanie początkujących "z automatycznym nadaniem nazwy" prowadzi do mapy (w innych językach) /słownika (w Pythonie)

https://docs.python.org/3/tutorial/datastructures.html#dictionaries
https://docs.python.org/3/library/stdtypes.html#typesmapping

Generalnie masowe powoływanie obiektów, bez ich trzymania w jakimś kontenerze, bardzo rzadko ma sens.

0

Życiowy - żaden. Chcę po prostu wiedzieć czy to jest możliwe. Jak napisałem to mogę wrzucać obiekty do listy, ale jeśli można stworzyć obiekt nie przypisując go nigdzie i on istnieje (jeśli istnieje) to chcę to wykorzystać/użyć.

1
Radosław Głębicki napisał(a):

Życiowy - żaden. Chcę po prostu wiedzieć czy to jest możliwe. Jak napisałem to mogę wrzucać obiekty do listy, ale jeśli można stworzyć obiekt nie przypisując go nigdzie i on istnieje (jeśli istnieje) to chcę to wykorzystać/użyć.

jeśli nie masz do obiektu żadnej referencji, to szybko zostanie posprzątany (w po drugie "nie masz jak go wskazać", więc i nie da się użyć)

0

To co Próbujesz zrobić to bardzo zła rzecz, do tego używa się słownika. Na upartego:
https://stackoverflow.com/a/6181959

0

A dlaczego ma zostać posprzątany jeśli zawiera dane. Zrobiłem klasę w której init tworzy przypadkowe dane. I one są w obiekcie. Więc na pewno zostanie skasowany bo nie ma przypisanej nazwy? Czy naprawdę nie ma listy obiektów tworzonych z automatu. Jedyne rozwiązanie to lista/słownik (dlaczego słownik,a nie lista. Używam list). I się zastanawiam czy przypadkiem czegoś nie dubluję co już istnieje stworzone przez Pythona.

Aaa XY skumałem wcześniej! ;-D

0

To jakaś dyskusja XY, co Chcesz zrobić, co ma być na wejściu, a co na wyjściu z programu?

0
Radosław Głębicki napisał(a):

A dlaczego ma zostać posprzątany jeśli zawiera dane.
Nie ma do obiektu żadnej referencji (choć ma dane) -> płacze "nikomu nie jestem potrzebny :(" --> kosz

To się nazywa Garbage Colector, i jest w każdym języku jaki Ci może przyjść do głowy, za wyjątkiem C, C++, pascala

0
class Obj():
  def f(self):
    pass

for a in range(9):
   a = Obj()
   print(id(a))

U mnie wypisuje to te same wartości. Czyli zanim stworzysz kolejny obiekt, to poprzedni już nie istnieje.

0
enedil napisał(a):
class Obj():
  def f(self):
    pass

for a in range(9):
   a = Obj()
   print(id(a))

U mnie wypisuje to te same wartości. Czyli zanim stworzysz kolejny obiekt, to poprzedni już nie istnieje.

Dzięki.

Wszystko leci do tego samego identyfikatora. Czyli trzymać w liście. Ok.

Sprawa zamknięta.

0

E tam...

class Obj():
  def f(self):
    pass

for _ in range(9):
   Obj().f()

Ale to chore i głupie. A co do nadawania (sobie) nazwy, to brzmi jak odpowiedzialność Obj.

PS. To choćby dla takich pytań, jak początkującemu tłumaczę jak ten język działa, zaczynam od mut/nie-mut oraz gc w powiązaniu z poprzednim.

0

Wszystko z ciekawości i dla zabawy. Wy programujecie zawodowo. Ja dla poznania i zabicia nudy.

Zrobilem na początku klasy listę i do niej dodaję nazwy generowane w init. Dostęp do tej listy jest przez class.lista.append(nazwa). Czyli klasa w sobie ma listę swoich potomków. Więc się bawię w próbę dostępu do objektów z pominięciem DODATKOWEJ listy/słownika. Pewnie można i id objektu do takiej listy wrzucić tylko jak to wykorzystać i czy można. Myślę sobie, że objekty powinny być wywoływane bez dodatków. Tak to sobie wyobrażam, że działają w grupach, np. Wszystkie z nazwą zielone(x do n), a nie przeszukanie listy/słownika. Wyodrębnienie tych zielonych i wywołanie ich metody. Tak tylko sobie kombinuję. Dzięki za naprostowywanie mnie i sprowadzanie na ziemię. ;-D

1 użytkowników online, w tym zalogowanych: 0, gości: 1