Python打印对象设计

时间:2015-11-03 18:21:31

标签: python python-2.7

在以下课程中,每个对象都有自己的(自定义的)打印功能,称为 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)易于使用。
    • 缺点: 我想要打印的每个对象都有自己的pprint函数,因此它降低了代码在本课程中真正重要的可读性。
  • 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将根据对象的类型调用相应的打印功能。

    • 优势:代码更有条理。
    • 缺点:必须导入类,创建打印机对象并每次调用它以获取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将根据对象的类型调用相应的打印功能。

    • 优势:不必实例化任何Printer对象。可以直接调用pprint(obj)任何对象。
    • 缺点:代码组织不那么混乱。

1 个答案:

答案 0 :(得分:3)

我建议您为每个类定义添加__str__方法,然后使用标准内置版本进行打印:print(class_instance)。在内部,python调用__str__来获取实例的字符串表示。