Tworzenie obiektów przez funkcję.

Tworzenie obiektów przez funkcję.
JD
  • Rejestracja:ponad 9 lat
  • Ostatnio:21 dni
  • Postów:48
0

Dzień dobry, przepraszam ale jak to zrobić, aby funkcja nadawała nazwę nowo powstającym obiektom?

stivens
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 5 godzin
0

Nie rozumiem?

Jaka nazwe? Pole name? Etykiete zmiennej?


λλλ
JD
Klasa Produkt(), posiada takie atrybuty jak: nazwa; nrKatalogowy itp. Chciałbym aby funkcja tworzyła nowe obiekty o różnych nazwach np nrKatalowowy = Produkt().
Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
2

To nie nadawanie nazwy jest twoim problem tylko scope. Zmienne są widoczne tylko w pewnym zakresie. Zmienna utworzona wewnatrz funkcji NIE BĘDZIE dostępna poza tą funkcją i tyle. Możesz z funkcji coś zwrócić i wtedy będzie dostępne, w zakresie bloku do którego ją zwróciłeś.

Kopiuj
def funkcja():
   x = 1 # to nie będzie dostępne jak wyjdziemy z funkcji
   y = 2 # to nie będzie dostępne jak wyjdziemy z funkcji
   z = 3 # to nie będzie dostępne jak wyjdziemy z funkcji
   return z # ta wartość będzie dostępna jeśli gdzieś ją przypiszesz

def main():
    v = funkcja() # przypisujemy wynik, więc ta wartość jest dostępna w tym scope


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
stivens
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 5 godzin
0

Klasa Produkt(), posiada takie atrybuty jak: nazwa; nrKatalogowy itp. Chciałbym aby funkcja tworzyła nowe obiekty o różnych nazwach np nrKatalowowy = Produkt().

To najlepiej konstruktorem (__init__)


λλλ
edytowany 1x, ostatnio: stivens
JD
  • Rejestracja:ponad 9 lat
  • Ostatnio:21 dni
  • Postów:48
0
Kopiuj
class Dupa():
    def __init__(self):
        print("doopa")

nazwa = "prod"

def tworz(nazwa):
    nazwa = Dupa()
    return nazwa

lista = []

lista.append(tworz(nazwa))

stivens
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 5 godzin
0
Kopiuj

class Dupa(): # serio? XD
    def __init__(self, name):
        self.name = name

wolowa = Dupa('Wolowa')
print(wolowa.name) # 'Wolowa'

λλλ
edytowany 3x, ostatnio: stivens
lion137
  • Rejestracja:ponad 8 lat
  • Ostatnio:17 minut
  • Postów:4943
3

Wietrzę tu problem XY, Opisz dokładniej wszystko, co Chcesz uzyskać.


stivens
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 5 godzin
5
lion137 napisał(a):

Wietrzę tu problem XY, Opisz dokładniej wszystko, co Chcesz uzyskać.

A ja patrzac na kod wietrze pierwszy dzien programowania : |


λλλ
edytowany 1x, ostatnio: stivens
JD
  • Rejestracja:ponad 9 lat
  • Ostatnio:21 dni
  • Postów:48
0

Moj program pobiera z pliku csv dane o pewnych produktac, aby później je automatycznie dodawać do sklepu internetowego i chciałbym aby z każdego pobranego wiersza pobrał odpowiednie dane i porobił z tego obiekty o nazwach będących ich numerami katalogowymi.

JD
  • Rejestracja:ponad 9 lat
  • Ostatnio:21 dni
  • Postów:48
0
Kopiuj


class Produkt():
    def __init__(self):
        self.nrKatalogowy = ''
        self.nazwa = ''
        self.opis = ''
        self.cena = 0
        self.producent = ''
        self.kategoria = ''
        self.podkategoria = ''
        self.ost = ''

class Silnik():
    def __init__(self):
        self.nazwaPl = "/Users/____/PycharmProjects/selenium/e-sklep/___ict_JD.csv"
        self.kolumny = []
        self.produkty = []
        self.plik = ''
        self.wiersz = ''
        self.nowy = ''

    def naglowek(self):
        plik = open(self.nazwaPl, 'r', encoding='utf-8-sig')
        naglowek = plik.readline()
        kolumny = naglowek.split(";")
        self.kolumny = kolumny
        self.plik = plik

    def dodaj(self):
        wiersz = self.plik.readline()
        self.wiersz = wiersz.split(";")
        self.nowy = kolumny[0]

    def twor(self):
        self.nowy = Produkt()

LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:około 5 godzin
  • Postów:8423
1

Mam wrażenie, że chcesz użyć słownika a nie listy. Słownik zawiera w sobie wartości o różnych nazwach (kluczach) właśnie:
https://docs.python.org/2/tutorial/datastructures.html#dictionaries

Kopiuj
nazwa = "prod"
def tworz(nazwa):
    nazwa = Dupa()
    return nazwa

lista = []

lista.append(tworz(nazwa))

To tak nie działa, jak myślisz, że działa. Polecam zrobienie print(tworz(nazwa)), wtedy zobaczysz, co ci naprawdę zwraca (instancję obiektu Dupa).


edytowany 1x, ostatnio: LukeJL
JD
Możliwe, że nie wiem czego mi trzeba ale wydaje mi się jednak, że listy obiektów typu: produkty = [produkt1, produkt2...]
LukeJL
No tak, ale wtedy te obiekty nie będą miały nazwy, do której się możesz odwołać, co najwyżej numer indeksu w liście.
JD
Tym fragmientem, chciałem zaprezentować jak CHCIAŁBYM aby to działało;)
LukeJL
chyba, że o zwykłą zmienną ci chodzi. Do czego ci ta nazwa potrzebna? W jakim sensie nazwa?
YA
  • Rejestracja:około 10 lat
  • Ostatnio:około 6 godzin
  • Postów:2371
0
  1. Nowotworzone obiekty możesz umieszczać w jakimś słowniku i tam przypisywać im nazwę.

  2. Obiekty (i ich atrybuty, typu nazwa, cena, ...) możesz inicjować podczas tworzenia.

  3. Możesz utworzyć obiekty i wrzucić je do "globalnego scope" pod jakąś zmyślną nazwą. Na Twoim etapie rozwoju nie jest to dobre rozwiązanie.

Przykład na 1,2,3:

Kopiuj
class Produkt():
	def _dummy(self):
		self._properties = {
		'nrKatalogowy': '',
        'nazwa'    :  '',
        'opis'     : '',
        'cena'     : 0,
        'producent': '',
        'kategoria': '',
        'podkategoria' : '',
        'ost': '',
	}
	
	def __init__(self):
		self._dummy()
		
	def __init__(self,**kwargs):
		self._dummy()
		for k,v in kwargs.items():
			if k in self._properties.keys():
				self._properties[k] = v
			else:
				print("Warning: {} is not an attribute of {}. Ignoring value.".format(k,self.__class__.__name__))
				
p1 = Produkt(nazwa='Foobar',cena=123.45)
p2 = Produkt(nazwa='Baz',kategoria='CatX',ost='bar')
p3 = Produkt(nazwa='Baz',dupa=8)

print("P1 = {}".format(p1._properties))
print("P2 = {}".format(p2._properties))
print("P3 = {}".format(p3._properties))


mojeObiekty = {}
mojeObiekty['ala'] = p1
mojeObiekty['ola'] = p2
mojeObiekty['ela'] = p3


print("P1 = {}".format(mojeObiekty['ala']._properties))
print("P2 = {}".format(mojeObiekty['ola']._properties))
print("P3 = {}".format(mojeObiekty['ela']._properties))

globals()['produkt1'] = p1
globals()['produkt2'] = p2
globals()['produkt3'] = p3

print("P1 = {}".format(produkt1._properties))
print("P2 = {}".format(produkt2._properties))
print("P2 = {}".format(produkt3._properties))

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.