klasa, a zasięg zmiennej w metodzie

0

Mam taką klasę:

class SkanerNmap:
    def __init__(self):
        self.skanerPortow = nmap.PortScanner()

    def skanujPort(self, adresHosta, port):
        host = socket.gethostbyname(adresHosta)
        self.skanerPortow.scan(host, str(port))

Popatrzmy teraz na 2 ostatnie linijki. Czy dobrze rozumiem, że scope dla każdej zmiennej jest następujący:

host - metoda skanujPort()
self.skanerPortow - obiekt klasy nmap.PortScanner() za sprawą self

2

klasa

Nie. OBIEKT, nie klasa. Różnica jak między krzesłem i krzesłem elektrycznym.

0

Czy to normalne zachowanie, że jeżeli mam deklarację klasy (metody + konstruktor), to po wywołaniu metody z tej klasy (bez wcześniejszej deklaracji obiektu będącego instancją tej klasy), konstruktor również "odpala"?

1

Ale to jest metoda klasy czy metoda obiektu klasy? Jeśli to metoda klasy to nie, żaden konstruktor się nie odpala bo niby czemu miałby się odpalić. Jeśli to metoda obiektu to nie da sie jej wywołać bez obiektu. Podsumowując: pytanie nie ma żadnego sensu.

0

Mam kod, w którym robię coś takiego:

 SkanerNmap().skanujPort(adresHosta, port)
class SkanerNmap:
    def __init__(self):
        self.skanerPortow = nmap.PortScanner()

    def skanujPort(self, adresHosta, port):
        self.skanerPortow.scan(host, str(port))
#...
#...
#...

Widzisz to? Dodam, że jest to przykład z książki, który właśnie sprawia, że jestem confused.

0

self.skanerPortow - obiekt klasy nmap.PortScanner() za sprawą self

ale to nie skanerPortow jest w scope'ie a self i za posrednictwem tego selfa sie dostajesz do skaneraPortow

1

SkanerNmap() no to przecież właśnie zawołałeś konstruktor i utworzyłeś obiekt o_O Te nawiasy nie są tam dla dekoracji. Jest różnica między SkanerNmap.metoda_klasy(cośtam) a SkanerNmap().metoda_obiektu(cośtam)

0

Tylko pod jaką nazwą dostępna jest instancja utworzonego obiektu klasy SkanerNmap?

Normalnie tak się to deklaruje:

lol =  SkanerNmap()
2

Pod żadną. To że nie przypisałeś obiektu do żadnej zmiennej nie znaczy że on nie istnieje.

 SkanerNmap().skanujPort(adresHosta, port)

da dokładnie taki sam efekt jak

dupa = SkanerNmap()
dupa.skanujPort(adresHosta, port)

Może zrozumiesz na łatwiejszym przykładzie, np. x = 1+2, czy gdzieś musiałeś przypisać do zmiennych te 1 i 2 żeby móc ich użyć? Albo x = "du" + "pa", używam stringów mimo że nie przypisałem ich wcześniej do żadnej zmiennej.

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