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

- Rejestracja:ponad 21 lat
- Ostatnio:około 3 lata
- 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:ponad 8 lat
- Ostatnio:około 5 godzin
lion137 napisał(a):
Wietrzę tu problem XY, Opisz dokładniej wszystko, co Chcesz uzyskać.
A ja patrzac na kod wietrze pierwszy dzien programowania : |
- Rejestracja:ponad 9 lat
- Ostatnio:21 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:ponad 9 lat
- Ostatnio:21 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:około 11 lat
- Ostatnio:około 5 godzin
- Postów:8423
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:około 10 lat
- Ostatnio:około 6 godzin
- Postów:2371
-
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))
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.