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

Odpowiedz Nowy wątek
2020-03-23 18:34

Rejestracja: 2 tygodnie temu

Ostatnio: 9 godzin temu

Lokalizacja: Cabarete, Republika Dominikany

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.

Pozostało 580 znaków

2020-03-23 19:20

Rejestracja: 1 rok temu

Ostatnio: 30 minut temu

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/tut[...]astructures.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.

edytowany 3x, ostatnio: AnyKtokolwiek, 2020-03-23 19:24

Pozostało 580 znaków

2020-03-23 19:21

Rejestracja: 2 tygodnie temu

Ostatnio: 9 godzin temu

Lokalizacja: Cabarete, Republika Dominikany

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

Pozostało 580 znaków

2020-03-23 19:23

Rejestracja: 1 rok temu

Ostatnio: 30 minut temu

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ć)

edytowany 1x, ostatnio: AnyKtokolwiek, 2020-03-23 19:24

Pozostało 580 znaków

2020-03-23 19:29

Rejestracja: 3 lata temu

Ostatnio: 4 minuty temu

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, 2020-03-23 19:29

Pozostało 580 znaków

2020-03-23 19:31

Rejestracja: 2 tygodnie temu

Ostatnio: 9 godzin temu

Lokalizacja: Cabarete, Republika Dominikany

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, 2020-03-23 19:33

Pozostało 580 znaków

2020-03-23 19:34

Rejestracja: 3 lata temu

Ostatnio: 4 minuty temu

0

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


Pozostało 580 znaków

2020-03-23 19:36

Rejestracja: 1 rok temu

Ostatnio: 30 minut temu

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

i wielu innych - enedil 2020-03-23 20:14
które mogą koledze przyjśc do głowy? - AnyKtokolwiek 2020-03-23 20:15
np. Rust, Forth, wersja D bez GC - enedil 2020-03-23 20:18

Pozostało 580 znaków

2020-03-23 20:16

Rejestracja: 6 lat temu

Ostatnio: 16 minut temu

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.

Pozostało 580 znaków

2020-03-24 01:16

Rejestracja: 2 tygodnie temu

Ostatnio: 9 godzin temu

Lokalizacja: Cabarete, Republika Dominikany

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.

Twoje własne założenia lepiej (od listy) spełnia słownik (dictionary) - AnyKtokolwiek 2020-03-24 09:03
Proszę o rozwiniecie dlaczego lepsze? Z ciekawości. - Radosław Głębicki 2020-03-24 23:44

Pozostało 580 znaków

2020-03-24 09:07

Rejestracja: 5 lat temu

Ostatnio: 1 minuta temu

Lokalizacja: Tam gdzie jest (centy)metro...

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.


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, 2020-03-24 09:09
Dokładnie, to co on kombinował to sa zwykłe haki i każdy go z takim kodem wywali do poprawki ;-) - lion137 2020-03-24 09:35

Pozostało 580 znaków

Odpowiedz

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