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

Przekazanie funkcji jako argument innej funkcji - PYTHON

VPS Starter Arubacloud
+1 głos
849 wizyt
pytanie zadane 23 marca 2020 w C i C++ przez t9omek Nowicjusz (130 p.)

Cześć, 

Piszę program który skanuje klasy WMI w windows. Chciałbym przekazać funkcje Win32_Bios(), jako argument do funkcji "scan".

Czy możecie mi pomóc? 

import wmi
import socket

####TEST####

class Wmiscan:
    def __init__(self,i, method):
        self.i = i
        self.method = method



    def scan(self):
        connection = wmi.WMI()
        b = self.method
        c = str(b)
        print(c)
        for self.i in connection.c:
            biosSn = self.i.SerialNumber
            print(biosSn)

    def scan2(self):
        print(self.method)





def main():
    Bios = Wmiscan("bios", "Win32_Bios()")

    Bios.scan()

    print("test")


if __name__ == "__main__":
    main()

 

Kod działający:

import wmi
import socket

####TEST####

class Wmiscan:
    def __init__(self,i, method):
        self.i = i
        self.method = method



    def scan(self):
        connection = wmi.WMI()
        b = self.method
        c = str(b)
        print(c)
        for self.i in connection.Win32_Bios():
            biosSn = self.i.SerialNumber
            print(biosSn)

    def scan2(self):
        print(self.method)





def main():
    Bios = Wmiscan("bios", "Win32_Bios()")

    Bios.scan()

    print("test")


if __name__ == "__main__":
    main()

1 odpowiedź

0 głosów
odpowiedź 23 marca 2020 przez adrian17 Ekspert (344,100 p.)

OK, czyli innymi słowy, chcesz żeby mając tekst "Win32_Bios" móc uzyskać metodę connection.Win32_Bios.

Do tego służy getattr():

method_name = "Win32_Bios"

getattr(connection, method_name)()

# lub dluzej:
method = getattr(connection, method_name)
method()

 

komentarz 23 marca 2020 przez adrian17 Ekspert (344,100 p.)
edycja 23 marca 2020 przez adrian17
for self.i in connection.Win32_Bios():

(natomiast to self.i IMO ogólnie nie ma sensu)

komentarz 24 marca 2020 przez t9omek Nowicjusz (130 p.)
Chciałbym zrobić uniwersalną metodę, która odczyta mi różne klasy wmi w zależności od przekazanych wartości.

W tym wypadku przez i przekazałem wartość bios.

 

Masz może jakiś lepszy pomysł jak to zrobić ?
komentarz 24 marca 2020 przez adrian17 Ekspert (344,100 p.)

Masz może jakiś lepszy pomysł jak to zrobić ?

Um... a coś jest nie tak z moją odpowiedzią wyżej?

komentarz 24 marca 2020 przez t9omek Nowicjusz (130 p.)
Chodzi mi o "(natomiast to self.i IMO ogólnie nie ma sensu)"
komentarz 24 marca 2020 przez adrian17 Ekspert (344,100 p.)

Bo nie rozumiem, po co w ogóle to self.i. (tym bardziej, że nawet niezależnie od magii ze stringami, ogólnie nie ma powodu by pisać pętle `for self.cokolwiek in rzecz`)
Wyszukiwanie metody natomiast czasem jest przydatne, jak wyżej.

Podobne pytania

+1 głos
0 odpowiedzi 429 wizyt
pytanie zadane 2 czerwca 2021 w C i C++ przez Mavimix Dyskutant (8,390 p.)
0 głosów
1 odpowiedź 598 wizyt
pytanie zadane 6 kwietnia 2018 w JavaScript przez JSJerry Początkujący (260 p.)
+1 głos
1 odpowiedź 572 wizyt
pytanie zadane 24 stycznia 2021 w C i C++ przez hicodyn Początkujący (420 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...