如何在python中打印自定义对象数组?

2024-06-16 11:33:47 发布

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

我是一个网络人,试图学习一些python来实现自动化。我很难理解OOP。写了下面的脚本(我认为不完美)来进行实验,我一直得到以下输出:

main.Router object at 0x0000021C68033E80

我的剧本:

class Router:
    name=''
    def __init__(self,ip,network):
        self.ip = ip
        self.network=network

    def getip(self):
        print(self.ip)
    def getname(self):
        print(self.name)
    def getnetwork(self):
        print(self.network)

class Switch(Router):
    def __init__(self,ip,network,layer):
        Router.__init__(self,ip,network)
        self.layer=layer
        self.vlans=[]
    def addvlan(self,vlan):
        self.vlans.append(vlan)
    def getvlans(self):
        print(self.vlans)
    def getlayer(self):
        print(self.layer)

routers=[]
switches=[]
while(True):
    rors = ""
    while(rors != "router" and rors!= "switch" and rors != "0"):
        rors = input("router or switch? 0 to exit: ")
    if(rors=="router"):
        routers.append(Router(input("enter ip: "),input("enter network: ")))
    elif(rors=="switch"):
        switches.append(Switch(input("enter ip: "),input("enter network: "),input("layer?: ")))
        stop=1
        while(stop!=0):
            stop=int(input("enter 1 to continue, 0 to stop adding vlans: "))
            if(stop==0):break
            switches[len(switches)-1].addvlan(int(input("add vlan: ")))
    elif(rors == "0"):
        break
    else: print("input error")

print(switches)
print(routers)

我知道,通过打印列表,我只打印内存指针指向的位置,但是我如何使它成为实际打印的值呢?谢谢你的帮助


Tags: selfiplayerinputinitdefnetworkrouter
1条回答
网友
1楼 · 发布于 2024-06-16 11:33:47

您需要重写__repr__方法来更改对象的字符串表示形式。下面是一个例子:

In [1]: class A1:
   ...:     def __init__(self, a, b):
   ...:         self.a = a
   ...:         self.b = b
   ...:

In [2]: class A2:
   ...:     def __init__(self, a, b):
   ...:         self.a = a
   ...:         self.b = b
   ...:     def __repr__(self):
   ...:         kvps = [f"{k}={v}" for k, v in vars(self).items()]
   ...:         return f"{type(self).__name__}({', '.join(kvps)})"
   ...:

In [3]: A1(1, 2)
Out[3]: <__main__.A1 at 0x7f533357fe20>

In [4]: A2(1, 2)
Out[4]: A2(a=1, b=2)

相关问题 更多 >