【问题标题】:Python: Access a list in a class with properties or custom methodsPython:使用属性或自定义方法访问类中的列表
【发布时间】:2016-12-11 16:02:51
【问题描述】:

我有以下课程:

def Interface:
    def __init__(self, vlan, zone, address):
        self.vlan = vlan
        self.zone = zone
        self.__address = []
        for i in address:
            self.__address.append(ipaddress.IPv4Interface(i))

一个接口实例不能有多个区域和 vlan,但可以有 1+ 个地址。 到目前为止,address 参数是一个列表,其中包含一个或多个地址作为项。

所以这是我的第一个问题:使用列表作为参数是一种好习惯吗?


目前我在思考如何访问地址变量:

  1. 使用属性

    我可以使用属性@address.set 附加地址,@address.del 删除一个特定地址,使用@address 获取所有个地址作为列表。

    我不喜欢这种方法的是:

    • 将来(恕我直言)无法使用覆盖所有以前值的“集合”之类的函数来扩展它(如果有必要,不知道)
    • 它看起来像一个“单一值”,但它是一个后台列表。
  2. 编写自定义方法

    使用自定义方法,例如:def add_address(address)、def clear_address()、get_address_all()

    我不喜欢这种方法的是:

    • 感觉不像是蟒蛇(可能这更像是一种感觉,而不是事实)
  3. 我为什么这么想,直接使用列表作为Interface.address

    我不喜欢这种方法的是:

    • 这不是一个简单的字符串列表,而是 IPv4Interface 类的实例。如果我的同事不关心,情况可能会更糟。

可能有人在这里可以给我一些有用的提示或理由为什么更喜欢一种方式而不是另一种方式(或者可能是另一种方式)。

谢谢!

【问题讨论】:

    标签: python list class properties getter-setter


    【解决方案1】:

    您更改接口以允许将变量地址计数传递给构造函数。

    class Interface:
        def __init__(self, vlan, zone, *addresses):
            # ...
    
    i = Interface(myVlan, myZone, myAddress1, myAddress2)
    

    addresses 变成一个包含myAddress1myAddress1 的元组。或者,您可以接受地址对象或地址对象列表,并根据其类型处理参数。至于地址访问,我肯定会选择选项 2。它非常灵活,易于阅读、理解和使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      • 2012-08-08
      相关资源
      最近更新 更多