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

如何在python中打印自定义对象数组?,python,python-3.x,python-3.8,Python,Python 3.x,Python 3.8,我是一个网络人,试图学习一些python来实现自动化。我很难理解OOP。写了下面的脚本(我认为不完美)来进行实验,我一直得到以下输出: main.0x0000021C68033E80处的路由器对象 我的剧本: class Router: name='' def __init__(self,ip,network): self.ip = ip self.network=network def getip(self): prin

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

main.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)

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

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

[1]中的
:A1类:
…:定义初始化(self,a,b):
…:self.a=a
…:self.b=b
...:
在[2]中:A2类:
…:定义初始化(self,a,b):
…:self.a=a
…:self.b=b
…:定义报告(自我):
…:kvps=[f“{k}={v}”表示k,v在vars(self).items()中
…:返回f“{type(self)。{u name}({,'.join(kvps)})”
...:
In[3]:A1(1,2)
出[3]:
In[4]:A2(1,2)
Out[4]:A2(a=1,b=2)

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

[1]中的
:A1类:
…:定义初始化(self,a,b):
…:self.a=a
…:self.b=b
...:
在[2]中:A2类:
…:定义初始化(self,a,b):
…:self.a=a
…:self.b=b
…:定义报告(自我):
…:kvps=[f“{k}={v}”表示k,v在vars(self).items()中
…:返回f“{type(self)。{u name}({,'.join(kvps)})”
...:
In[3]:A1(1,2)
出[3]:
In[4]:A2(1,2)
Out[4]:A2(a=1,b=2)

您可能想要覆盖
\uuuu str\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
\uuuuuuuuuuuuuuuuumethod@dangee1705:如果他们正在打印对象的列表,肯定是<代码>列表
总是打印包含对象的
repr
。@ShadowRanger是的,听起来不错,我永远记不起两个列表之间的区别了!=python中的数组。您已经列出您可能想要覆盖
\uu str\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
\uuuuuuuuuuuuuuuuuuuumethod@dangee1705:如果他们正在打印对象的列表,肯定是<代码>列表
总是打印包含对象的
repr
。@ShadowRanger是的,听起来不错,我永远记不起两个列表之间的区别了!=python中的数组。你有名单吗