栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

如何使用 python 特殊方法

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用 python 特殊方法

文章目录
    • __len__方法
    • __getitem__方法
    • random.choice函数
  • 总结

用一个非常简单的例子来展示如何实现 __getitme__和 __len__这两个特殊方法
示例 1-1  一摞有序的纸牌

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]

首先,我们用 collections.namedtuple 构建了一个简单的类来表示一张纸牌。(namedtuple 用以构建只有少数属性但是没有方法的对象,比如数据库条目。)

如下所示,利用 namedtuple ,我们可以很轻松地得到一个纸牌对象:

>>> beer_card = Card('7', 'diamonds')
>>> beer_card
Card(rank='7', suit='diamonds')
__len__方法

FrenchDeck 这个类,可以用 len() 函数来查看一叠牌有多少张:

>>> deck = FrenchDeck()
>>> len(deck)
52
__getitem__方法

通过 __getitem__方法, 可以实现:从一叠牌中抽取特定的一张纸牌,比如说第一张或最后一张,是很容易的:deck[0] 或 deck[-1] 。

>>> deck[0]
Card(rank='2', suit='spades')
>>> deck[-1]
Card(rank='A', suit='hearts')
random.choice函数

实现随机抽取一张纸牌

>>> from random import choice
>>> choice(deck)
Card(rank='3', suit='hearts')
>>> choice(deck)
Card(rank='K', suit='spades')
>>> choice(deck)
Card(rank='2', suit='clubs')
总结

可以体会到通过实现特殊方法来利用 Python 数据模型的两个好处。

1) 作为你的类的用户,他们不必去记住标准操作的各式名称(“怎么得到元素的总数?是 .size() 还是 .length() 还是别的什么?”)。

2) 可以更加方便地利用 Python 的标准库,比如 random.choice 函数,从而不用重新发明轮子。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/949654.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号