python模型的属性是什么_Python数据模型

Python解释器在遇到特殊的句法(通常以双下划线开头)时,会使用特殊的方法去处理它。

比如我们在使用列表或者字典时经常会用到obj[key],而解释器遇到obj[key]时会调用obj.getitem(key)来获取值。

一摞有风格的纸牌(python2.7)

import collections

Card = collections.namedtuple('Card', ['rank', 'suit'])

class FrenchDeck:

ranks = [str(n) for n in range(2, 11)] + list('JQKA')

suits = 'spades diamonds clubs hearts'.split()

def __init__(self):

self._cards = [Card(rank, suit) for suit in self.suits for rank in self.ranks]

def __len__(self):

return len(self._cards)

def __getitem__(self, position):

return self._cards[position]

if __name__ == '__main__':

deck = FrenchDeck()

print len(deck)

for card in deck:

print card

上面的代码中几点需要注意的:

1.namedtuple:用以构建只有少数属性但是没有方法的对象

2.可以使用len(FrenchDeck())来获取这一叠牌的数量

3.可以使用FrenchDeck()[0]来获取第一张牌,这是因为定义了__getitem__()方法

4.可以使用for来迭代这一叠牌,也是因为__getitem__()方法

在Python中,很多时候特殊方法的调用是隐式的,比如for i in x:这个语句,背后调用的是iter(x),而这个函数的背后则是x.iter()方法。

repr()和str()的区别:

__str__()是在使用str()函数时或者在用print打印一个对象的时候被调用,并且它返回的字符串对终端用户更加友好。

__repr__()是在使用repr()函数被调用,交互式的控制台和调试程序用repr()函数来获取字符串表示形式

常用的特殊方法:

字符串表示形式:__repr__ __str__

集合模拟:__len__ __getitem__ __setitem__ __contains__

迭代枚举:__iter__ __next__

可调用模拟:__call__

上下文管理:__enter__ __exit__

实例的创建和销毁:__new__ __init__ __del__

属性管理:__getattr__ __getattribute__ __setattr__ __delattr__ __dir__

属性描述符:__get__ __set__ __delete__

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值