在以下课程中,每个对象都有自己的(自定义的)打印功能,称为 pprint 。
(实际代码中的对象多于下面提供的对象)。
class Device(object):
"""
Device: a MAC address, a name (optional), an ip(s) (optional),
and a list of Interface objects.
"""
def __init__(self, ip='', name='', mac=''):
def addIp(self, ip):
def getInterface(self, name):
def removeDuplicates(self):
def pprint(self, disp=MORE):
def toCSV(self, outputFolder=outputPath):
class Interface(object):
"""
Interface: a name, a status and a set of Link objects.
It can be physical (port) or virtual (interface).
e.g: name : BAGG1,
status: TRUNK,
links : [(vlan1, mac1), (vlan2, mac2), ...]
"""
def __init__(self, name):
self.name = name
self.links = []
self.status = ''
def addLink(self, vlan='', destMAC=''):
def getValues(self):
def _removeDuplicates(self):
def pprint(self, disp=MORE):
在以下选项中,什么是更好/更有效/更多Pythonic?
1。在每个类中放置一个pprint函数(如上所述):
obj.pprint(args)
易于使用。 2。有专门的打印机类:
class NetworkPrinter(object):
def __init__(self, obj):
def pprint(self, disp=MORE, keyList=None, filters=[], padding=20):
def devicePrint(self, disp=MORE):
def interfacePrint(self, disp=MORE):
注意: pprint将根据对象的类型调用相应的打印功能。
import Printer
p = Printer()
p.pprint(obj)
第3。没有专用的打印机类:
def pprint(obj, disp=MORE, keyList=None, filters=[], padding=20):
def devicePrint(obj, disp=MORE):
def interfacePrint(obj, disp=MORE):
注意: pprint将根据对象的类型调用相应的打印功能。
pprint(obj)
任何对象。答案 0 :(得分:3)
我建议您为每个类定义添加__str__
方法,然后使用标准内置版本进行打印:print(class_instance)
。在内部,python调用__str__
来获取实例的字符串表示。