数据模型

数据模型

python数据模型是对python框架的描述,主要内容就是python特殊方法的使用

通过使用特殊方法,我们使自己定义的对象能够被一些函数所支持

意思就是说在自定义的类中实现了某些特殊方法,

  • 那么类的实例对象就可以直接调用python的一些内置函数,如len()
  • 使类的对象变成了python内置对象,如序列对象

例子:

import collections
Card = collections.namedtuple('Card', ['suit', 'rank'])
class Deck:
    ranks = [str(rank) for rank in range(2, 11)] + 'JQKA'
    suits = '黑桃 红桃 方片 梅花'.split()
    def __init__(self):
        self._cards = [Card(suit,rank) for suit in suits for rank in ranks]
    
    def __len__(self):
        return len(self._cards)
    
    def __getitem__(self, item):
        return self._cards[item]

上面的Deck类实现了特殊方法len和getitem,那么在使用Deck类的对象时,可以直接使用序列数据类型所能使用的所有方法,实现了这两个特殊方法,就可以认为Deck类就是一个序列数据类型

如:

deck = Deck()
print(len(deck))
print(deck[0])
print(Card('黑桃', 7) in deck)

还有特殊方法repr,实现了这个特殊方法,那么对象可以直接被print打印出来,也就是实现了repr特殊方法的类的对象可以用字符串的形式被表达出来

如:

class Demo:
    def __init__(self):
        pass
    
    def __repr__(self):
        return 'Demo'
    
d = Demo()
print(d)	#这里打印的结果不是object之类的,而是字符串Demo

小结

  • 特殊方法的存在是为了被python解释器调用的
  • 调用len(),背后实际上是调用了obj.__ len __,也就是说由解释器去调用
  • 调用print(xxx),实际上是调用了__ repr __
  • 特殊方法基本是隐式调用的,如for i in x,背后实际上是调用了iter(x),而iter(x)背后又调用了x.__ iter __
  • 如果是python内置类型,如列表list、字符串str、字节序列bytearray等等,那么CPython会抄个近路,直接读取内置对象的C语言结构体,直接读取一个值比调用一个方法速度要快得多
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值