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

Automatyczne tworzenie objektów, np. w pętli
RG
  • Rejestracja:około 5 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Sardine, Italy
  • Postów:187
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:

Kopiuj
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:

Kopiuj

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.

AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około miesiąc
  • Postów:3561
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.


Bo C to najlepszy język, każdy uczeń ci to powie
edytowany 3x, ostatnio: AnyKtokolwiek
RG
  • Rejestracja:około 5 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Sardine, Italy
  • Postów:187
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ć.

AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około miesiąc
  • Postów:3561
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ć)


Bo C to najlepszy język, każdy uczeń ci to powie
edytowany 1x, ostatnio: AnyKtokolwiek
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:około godziny
  • Postów:4928
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


edytowany 1x, ostatnio: lion137
RG
  • Rejestracja:około 5 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Sardine, Italy
  • Postów:187
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

edytowany 1x, ostatnio: Radosław Głębicki
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:około godziny
  • Postów:4928
0

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


AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około miesiąc
  • Postów:3561
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


Bo C to najlepszy język, każdy uczeń ci to powie
enedil
i wielu innych
AK
które mogą koledze przyjśc do głowy?
enedil
np. Rust, Forth, wersja D bez GC
enedil
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 10 godzin
  • Postów:1027
0
Kopiuj
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.

RG
  • Rejestracja:około 5 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Sardine, Italy
  • Postów:187
0
enedil napisał(a):
Kopiuj
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.

AK
Twoje własne założenia lepiej (od listy) spełnia słownik (dictionary)
RG
Proszę o rozwiniecie dlaczego lepsze? Z ciekawości.
MO
  • Rejestracja:około 10 lat
  • Ostatnio:około 12 godzin
  • Lokalizacja:Tam gdzie jest (centy)metro...
0

E tam...

Kopiuj
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.


Każdy problem w informatyce można rozwiązać, dodając kolejny poziom pośredniości,z wyjątkiem problemu zbyt dużej liczby warstw pośredniości — David J. Wheeler
edytowany 1x, ostatnio: Mokrowski
lion137
Dokładnie, to co on kombinował to sa zwykłe haki i każdy go z takim kodem wywali do poprawki ;-)
RG
  • Rejestracja:około 5 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Sardine, Italy
  • Postów:187
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

enedil
Nie jest to szczególnie rozważne.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.