链式Python类调用

2024-06-01 03:49:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图建立一组类来定义OSI堆栈中协议的层次属性。。。从抽象的意义上讲,我只需要从父python类继承属性,但我需要能够一次调用整个类链。。。所以,我在找这样的东西。。。在

#!/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完成这个任务的方法吗?提前谢谢。。。在


Tags: selfnonereturn属性定义objectfooinit
2条回答

正如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)

看看在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使用/运算符组成来自不同层的包。在

相关问题 更多 >