我是Python的新手,嘗試使用類繼承,並且一直未能圍繞共享變量進行包裝。我有兩個班,到目前爲止,Scan
和Ping
:Python類的繼承和使用變量
scan.py
class Scan(object):
""" Super class for scans """
identifier = str(random.getrandbits(128))
timestamp = int(time.time())
results_dir = "/tmp/{}/".format(identifier)
total_hosts = 0
def __init__(self, target_hosts=None, target_ports=None):
self.__target_hosts = target_hosts
self.__target_ports = target_ports
self.scan_string = "-sT -O --script auth,vuln"
@property
def target_hosts(self):
return self.__target_hosts
@target_hosts.setter
def target_hosts(self, hosts):
""" Sets target hosts for scan """
""" Nmap Expects to be single-spaced '1 2 3' separated """
self.__target_hosts = hosts.replace(", ", " ")
ping.py
import nmap
from .scan import Scan
class Ping(Scan):
""" Ping sweep """
def __init__(self, ping_string, hosts):
super(Scan, self).__init__()
self.ping_string = ping_string
self.hosts = hosts
在我的腳本,幾乎調用了一切,我試圖:
from models.scan import Scan
from models.ping import Ping
s = Scan()
hosts = "192.168.0.0/24"
s.target_hosts = hosts
pinger = Ping(ping_string, s.target_hosts)
此行沒有任何意義,我...如果平安從掃描繼承,爲什麼當我打電話s.targets_hosts
做到這一點唯一的工作?我不能從Ping
這個類別撥打target_hosts
,例如Ping.target_hosts
?
在你的最後一個問題,你的意思是「叫'target_hosts'從'Ping' *** ***例如像'P =平(); p.target_hosts '?」 '。 '不同於'。 ' - 兩個都是有效的,但是非常不同。 –
jedwards
對象實例和類有區別...請閱讀更多。 s是類Scan的一個實例。您通過s = Scan()啓動它。您也可以使用Scan類作爲單例對象,但不依賴於__init__方法。 –