虽然经历Scapy的源代码(https://github.com/jwiegley/scapy),I跨越事实均未以太,IP,TCP,UDP或任何其它协议类别包含任何__init__方法来,他们也没有任何具有类标注的方法。所有这些类继承Packet类,它们包含__init__方法。类初始化
代码结构是这样的:
class Ether(Packet):
# class methods
class IP(Packet, IPTools):
# class methods
# Other protocol classes
所以,我想知道如何当我们创建一个这样的包这个类的实例被创建:
packet = Ether()/IP()/TCP()
我能理解“/ “符号。 Packet类已经覆盖__rdiv __()方法,并且由于所有这些类都是Packet的子类,因此调用其父包实例的__rdiv __()。
但是,如何创建这些类的实例仍然不清楚。
此外,IP类可以这样
ip = IP(src="10.0.0.1")
如创建,IP没有任何__init__方法,这个初始化是如何可能的?
仅供参考,__init__ 包类看起来是这样的:
def __init__(self, _pkt="", post_transform=None, _internal=0, _underlayer=None, **fields):
# initialization code
任何帮助将不胜感激。
您已经理解了继承的原则,因为如果子类没有定义父类的'__rdiv __()'方法,就会调用它。你认为'__init __()'有什么不同? –
感谢您的回复。实际上,我知道parent的__init__必须从child的__init__中调用(如果有的话)。所以,我想也可能在这种情况下,父母的__init__必须被调用。 – Soumen
@Soumen父母的'__init __()'只有在孩子拥有'__init __()'本身时,才需要从孩子的init明确调用。如果孩子没有'__init __()',它会使用其父'__init __()'。当你在python中继承一个类时,你继承了它的所有属性和函数,其中还包括像init这样的函数。 –