Python:使用属性或自定义方法访问类中的列表

时间:2016-08-05 09:27:20

标签: python list class properties getter-setter

我有以下课程:

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将所有地址作为列表。

    我不喜欢这种方法:

    • 未来(imho)无法通过覆盖所有以前值的'set'等函数来扩展它(duno如果必要的话)
    • 它看起来像是“单一值”,但它是后台列表。
  2. 编写自定义方法

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

    我不喜欢这种方法:

    • 感觉不到pythonic(可能这是一种感觉,而不是事实)
  3. 为什么我会考虑它,只需将列表直接用作Interface.address

    我不喜欢这种方法:

    • 这不是一个包含字符串的简单列表,而是IPv4Interface类的实例。如果我的同事不关心它,它可能会变得更糟。
  4. 可能有人在这里可以给我一些有用的提示或理由为什么偏好一种方式而不是另一种方式(或者可能是另一种方式)。

    谢谢!

1 个答案:

答案 0 :(得分:0)

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

class Interface:
    def __init__(self, vlan, zone, *addresses):
        # ...

i = Interface(myVlan, myZone, myAddress1, myAddress2)

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