如何在类实例中调用getter时将列表作为字符串返回

时间:2018-06-06 21:21:43

标签: python-3.x class

我有一个类变量,一个列表,一次可以包含多个值(MAC地址)。我希望能够将值作为逗号分隔的字符串而不是列表返回。我知道我可以这样做:

class test(object):
     def __init__(self, mac):
         self.mac = mac

         @property
         def mac(self):
             return self.mac
             # return ','.join(map(str, self.mac))
         @mac.setter
         def mac(self, mac):
             self.mac = mac
             #self.mac = ','.join(map(str, mac))

     def macs_as_a_list(self):
         return ','.join(map(str, self.mac))

m1 = test(mac=['aa:bb:cc:dd:ee:ff', '11:22:33:44:55:66'])

m1.mac
  Out: ['aa:bb:cc:dd:ee:ff', '11:22:33:44:55:66']
  Desired: 'aa:bb:cc:dd:ee:ff,11:22:33:44:55:66'

这当然有效: m1.macs_as_a_list()

但是,有没有办法在setter中进行此转换(或者在上面的注释行中演示的getter中)?

1 个答案:

答案 0 :(得分:1)

常见的方法是使用私有变量来存储属性背后的原始值,并使用getter来相应地格式化它。

class test(object):
    def __init__(self, mac):
        self.mac = mac

    @property
    def mac(self):
        return ','.join(self._mac)

    @mac.setter
    def mac(self, mac):
        self._mac = mac


m1 = test(['aa:bb:cc:dd:ee:ff', '11:22:33:44:55:66'])
print(m1.mac) # 'aa:bb:cc:dd:ee:ff,11:22:33:44:55:66'