前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python 数据模型

python 数据模型

原创
作者头像
python亦希
发布2022-01-20 10:06:37
4350
发布2022-01-20 10:06:37
举报
文章被收录于专栏:python理论

1、通过实现特殊方法,自定义类型可以表现的跟内置类型一样;

如下代码,实现len, getitem,可使自定义类型表现得如同列表一样。

代码语言:txt
复制
import collections
from random import choice

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 rank in self.ranks
                       for suit in self.suits]

    def __len__(self):
        return len(self._cards)

    def __getitem__(self, position):
        return self._cards[position]

suit_values = dict(spades=3, hearts=2, diamonds=1, clubs=0)
def spade_hith(card):
    rank_value = FrenchDeck.ranks.index(card.rank)
    # print(rank_value)
    # print(suit_values[card.suit])
    return rank_value * len(suit_values) + suit_values[card.suit]

if __name__ == '__main__':
    deck = FrenchDeck()
    #card = choice(deck)
    #print(card)
    for card in sorted(deck, key=spade_hith):
        print(str(card))
        print(repr(card))

 2、repr和str

(1) repr所返回的字符串应该准确(%r),无歧义,并且尽可能表达出如何用代码创建出这个被创建的对象,如repr(v);输出Vector(3, 4)

(2) str在str函数被调用(%s),或者打印一个对象的时候被调用,如str(v);输出(3,4)

(3)默认实现打印对象时,两者没有什么区别

(4)两个特殊方法,只想实现一个时,repr是更好的选择,因为如果一个对象没有str函数,而python解释器又需要调用时,会用repr替代。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档