• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Python - Podmiana funkcji w zmiennej

+1 głos
645 wizyt
pytanie zadane 25 lutego 2020 w Python przez PIxEL Nowicjusz (180 p.)
zamknięte 26 lutego 2020 przez PIxEL

Cześć, 

jestem początkującym w zakresie programowania w Pythonie. Napotkałem pewien problem.

 

Mam klasę Dump w innym pliku, a w niej metoda xrr(self, login) oraz yrr(self, login)

W innym pliku mam klasę Querry (dziedziczoną z innej klasy Systems), w której przez jeszcze inną zmienną chciałbym modyfikować wartość zmiennej.

Demonstruje jak to wygląda:

 

class Querry(Systems):

def executes(self, login, system, loginDB):

if (system == 1):

dump_system = Dump.xrr(self, login)

elif (system == 2):

dump_system = Dump.yrr(self, login)

 

dump_system(login) # później już swobodne wykonanie

Wiem, że dump_system w obecnej formie jest interpretowane jako wartość return (która jest None) z metod xrr yrr.  Jak mogę inaczej to zrobić? Jest jakaś gotowa funkcja na przekształcenie tej zmiennej jako zmienną obiektową?

komentarz zamknięcia: Problem rozwiązany.
komentarz 25 lutego 2020 przez adrian17 Mentor (355,160 p.)

Czemu nie bezpośrednio tak?

def executes(self, login, system, loginDB):
  if system == 1:
    Dump.xrr(self, login)
  elif system == 2:
    Dump.yrr(self, login)

 

komentarz 26 lutego 2020 przez PIxEL Nowicjusz (180 p.)
Bo wykonać ma się za if/elif. Chciałem użyć If/elif jako przełącznik między metodami.

Chodzi o to, żeby metoda executes wykonywała w zasadzie to samo, tylko zapytania są inne (xrr i yrr) do innych baz mysql. Bez sensu jest moim zdaniem pisać 50 tych samych linii w if i 50 w elif w momencie kiedy kod robi to samo, a jest tylko inna metoda użyta gdzieś pomiędzy. W zależności od tego co wybierze user ma się wykonać xrr lub yrr. Taki był zamysł, żeby się podmieniała zmienna dump_system na xrr lub yrr i za ifem wykonała dump_system.

1 odpowiedź

+1 głos
odpowiedź 26 lutego 2020 przez adrian17 Mentor (355,160 p.)
wybrane 26 lutego 2020 przez PIxEL
 
Najlepsza

Jeśli dobrze rozumiem potrzebę, to można to zapisać tak:

  def executes(self, login, system, loginDB):
    if system == 1:
     dump_system = lambda login: Dump.xrr(self, login)
    elif system == 2:
     dump_system = lambda login: Dump.yrr(self, login)
    dump_system(login)

lub tak:

  def executes(self, login, system, loginDB):
    if system == 1:
     dump_system = Dump.xrr
    elif system == 2:
     dump_system = Dump.yrr
    dump_system(self, login)

 

komentarz 26 lutego 2020 przez PIxEL Nowicjusz (180 p.)
Działa drugi sposób, dzięki wielkie - a ja ze 3 dni walczyłem, a to tak prosto można było zrobić ! Ty to jednak majster jesteś :D

Podobne pytania

0 głosów
2 odpowiedzi 2,964 wizyt
pytanie zadane 8 sierpnia 2015 w C i C++ przez niezalogowany
+1 głos
4 odpowiedzi 1,579 wizyt
pytanie zadane 10 września 2021 w Python przez Hajpa Użytkownik (910 p.)
+1 głos
1 odpowiedź 1,081 wizyt

93,757 zapytań

142,716 odpowiedzi

323,363 komentarzy

63,353 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...