连锁调用Python类
我正在尝试创建一组类,用来定义OSI模型中协议的层级属性……从抽象的角度来看,我只需要从父类中继承属性,但我需要能够一次性调用整个类的链条……所以,我在寻找类似这样的东西……
#!/usr/bin/env python
class Foo(object):
def __init__(self,fooprop1=None):
return None
class Bar(Foo):
def __init__(self,barprop1=None):
return None
if __name__=='__main__':
tryit = Foo(fooprop1="someMacAddress").Bar(barprop1="someIpAddress")
但是,当我运行这个脚本时,它提示说 AttributeError: 'Foo' object has no attribute 'Bar'
有没有人能告诉我怎么在python中做到这一点?提前谢谢大家……
2 个回答
1
正如S.Lott提到的,你应该做类似这样的事情:
class Foo(object):
def __init__(self,fooprop1=None):
return None
class Bar(object):
def __init__(self,barprop1=None, afoo):
self.foo = afoo
return None
if __name__=='__main__':
thefoo = Foo(fooprop1="someMacAddress")
thebar = Bar(barprop1="someIpAddress", thefoo)
2
看看在 scapy 中是怎么做的:
$ sudo scapy
Welcome to Scapy (2.1.0)
>>> sr(IP(dst="8.8.8.8") / UDP() / DNS(rd=1,qd=DNSQR(qname="stackoverflow.com")))
Begin emission:
..............................Finished to send 1 packets.
.............*
Received 44 packets, got 1 answers, remaining 0 packets
(<Results: TCP:0 UDP:1 ICMP:0 Other:0>, <Unanswered: TCP:0 UDP:0 ICMP:0 Other:0>)
>>> ans = _[0]
>>> ans.summary()
IP / UDP / DNS Qry "stackoverflow.com" ==> IP / UDP / DNS Ans "64.34.119.12"
scapy
使用 /
运算符来把不同的层组合成一个数据包。