没有__init__方法的类初始化

时间:2015-09-11 11:37:18

标签: python class

在浏览scapy源代码(https://github.com/jwiegley/scapy)时,我发现没有以太 IP TCP UDP 或任何其他协议类包含任何__init__方法,也没有任何带 @classmothod 注释的类方法。所有这些类都继承了 Packet 类,其中包含__init__方法。

代码结构如下:

class Ether(Packet):
    # class methods

class IP(Packet, IPTools):
    # class methods

# Other protocol classes

所以,我想知道在创建这样的数据包时如何创建这个类的实例:

packet = Ether()/IP()/TCP()

我能理解" /"符号。 Packet类已重写__rdiv __()方法,并且由于所有这些类都是Packet的子类,因此调用其父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

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

如果类不包含自己的__init__(),它将从超类中获取一个。添加更改时,只需要覆盖__init__()。也许this会帮助您理解