首页 / PYTHON / 没有属性样板的Python类
没有属性样板的Python类
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了没有属性样板的Python类,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1518字,纯文字阅读大概需要3分钟。
内容图文
我的许多课程都类似于以下课程来代表帐户
class Account(object):
def __init__(self, first, last, age, id, balance):
self.first = first
self.last = last
self.age = age
self.id = id
self.balance = balance
def _info(self):
return self.first, self.last, self.age, self.id, self.balance
def __eq__(self, other):
return self._info == other._info()
def __hash__(self):
return hash((type(self), self.info()))
def ... # other methods follow
但实际上,唯一相关的信息是我关心的属性列表,包括首尾,年龄,ID,余额.是否有标准方法定义遵循此结构的Python类?
乍一看,我想到过namedtuple,但是我不确定那是否允许我在事实之后添加其他方法.真的,我想要类似以下的东西
class Account(object):
attributes = "first last age id balance"
def ... # other methods
最好的方法是什么?
解决方法:
不知道这是多么惯用,但是以下内容可以满足您的要求:
class Slottable:
def __init__(self, *args):
for slot, arg in zip(self.slots.split(' '), args):
setattr(self, slot, arg)
def _info(self):
return tuple(getattr(self, attr) for attr in self.slots.split())
def __eq__(self, other):
return self._info() == other._info()
def __hash__(self):
return hash((type(self), self._info()))
class Account(Slottable):
slots = "first last age id balance"
def fullname(self):
return self.first + " " + self.last
matt = Account("Matthew", "Smith", 28, 666, 1E6)
john = Account("John", "Jones", 46, 667, 1E7)
d = {matt: 5, john: 6} # Hashable
print matt.fullname()
#=> "Matthew Smith"
print john.fullname()
#=> "John Jones"
print matt == matt, matt == john
#=> True False
matt.age = 29 # Happy birthday!
print matt.age
#=> 29
内容总结
以上是互联网集市为您收集整理的没有属性样板的Python类全部内容,希望文章能够帮你解决没有属性样板的Python类所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。