我确实有一个"联系人"类,我从客户数据库中的一个联系人那里获取所有字段。属性键不是动态的;可以硬编码。 两个访问属性,我需要客户获取者和设置器;getters确实格式化输出,例如日期格式,货币,...setters也是如此,例如,当您设置日期时间时,如果转换为数据库的 UNIX 时间戳。
另外,我需要这些属性在我的 IDE 中自动完成,不喜欢手动编写属性名称,因为我通常会用拼写错误搞砸它们。所以我认为它们要么需要是一个属性,要么是一个函数。
我找到的解决方案,但有很多代码行:
class Contact(Dict):
def __init__(self, values: Dict = {}):
self.values = values
get_email(self):
return self.values('email')
set_email(self, value):
self.values['email'] = value
get_create_date(self):
d = self.values.get('create_date', None)
if d:
return d.strftime('%Y-%m-%d')
else:
return None
set_create_date(self, value):
self.values['create_date'] = value
get_price(self):
p = self.values.get('price', None)
if d:
return "{:,}.-".format(p)
else:
return None
我认为没有理由拥有单独的getter和setter,也没有理由存储values
而不是存储该dict
中的单个元素。
class Contact:
def __init__(self, values):
self.email = values['email']
d = values.get('create_date')
if d is not None:
d = d.strftime('%Y-%m-%d')
self.create_date = d
p = values.get('price')
if p is not None:
p = '{:,}.-'.format(p)
self._price = p
@property
def price(self):
return self._price
您的二传手没有进行任何验证,因此您可以直接分配给self.email
和self.create_date
。由于您没有price
二传手,我将把它变成一个没有二传手的属性,这样您就可以检索价格但不能设置它。