Dzień dobry, przepraszam ale jak to zrobić, aby funkcja nadawała nazwę nowo powstającym obiektom?
Tworzenie obiektów przez funkcję.
- Rejestracja: dni
- Ostatnio: dni
Nie rozumiem?
Jaka nazwe? Pole name? Etykiete zmiennej?
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Space: the final frontier
- Postów: 26433
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
- Rejestracja: dni
- Ostatnio: dni
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__)
- Rejestracja: dni
- Ostatnio: dni
- Postów: 48
class Dupa():
def __init__(self):
print("doopa")
nazwa = "prod"
def tworz(nazwa):
nazwa = Dupa()
return nazwa
lista = []
lista.append(tworz(nazwa))
- Rejestracja: dni
- Ostatnio: dni
class Dupa(): # serio? XD
def __init__(self, name):
self.name = name
wolowa = Dupa('Wolowa')
print(wolowa.name) # 'Wolowa'
- Rejestracja: dni
- Ostatnio: dni
- Postów: 5023
Wietrzę tu problem XY, Opisz dokładniej wszystko, co Chcesz uzyskać.
- Rejestracja: dni
- Ostatnio: dni
lion137 napisał(a):
Wietrzę tu problem XY, Opisz dokładniej wszystko, co Chcesz uzyskać.
A ja patrzac na kod wietrze pierwszy dzien programowania : |
- Rejestracja: dni
- Ostatnio: dni
- Postów: 48
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.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 48
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()
- Rejestracja: dni
- Ostatnio: dni
- Postów: 8487
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).
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2384
-
Nowotworzone obiekty możesz umieszczać w jakimś słowniku i tam przypisywać im nazwę.
-
Obiekty (i ich atrybuty, typu nazwa, cena, ...) możesz inicjować podczas tworzenia.
-
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))