Tworzenie obiektów przez funkcję.

0

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

0

Nie rozumiem?

Jaka nazwe? Pole name? Etykiete zmiennej?

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

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

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

0
class Dupa():
    def __init__(self):
        print("doopa")

nazwa = "prod"

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

lista = []

lista.append(tworz(nazwa))

0

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

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

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

5
lion137 napisał(a):

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

A ja patrzac na kod wietrze pierwszy dzien programowania : |

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.

0


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

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

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

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:

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

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