Python进阶(五):特殊方法

来源:互联网 发布:淘宝的退款率怎么看 编辑:程序博客网 时间:2024/06/06 23:19

Python一大吸引人的特点就是它的特殊方法。它的特殊方法主要应用于类中,方便了类的一些操作操作。


举个例子:
比如我们想了解一个类对象中的信息,并且只需要用print(类对象)就可以得到我们想要的信息。如果我们直接按照下面的做法:

class A(object):    def __init__(self):        passa = A()print(a)

那么我们会得到这样的结果
这里写图片描述
所以得到的只是类对象的地址,并非我们知道类对象中的信息。

这时候我们就需要运用特殊方法了。
请看下面两个例子:

import collectionsfrom math import hypotfrom random import choiceCard = collections.namedtuple('Card', ['rank', 'suit'])class PokeDeck(object):    ranks = [str(n) for n in range(2, 11)] + list('JQKA')    suits = ['spades', 'diamonds', 'clubs', 'hearts']    def __init__(self):        self._card = [Card(rank, suit) for rank in self.ranks                                       for suit in self.suits]    def __len__(self):        return len(self._card)    def __getitem__(self, item):        return self._card[item]    def __repr__(self):        return "This is a deck"card = PokeDeck()print(card)print(card[0])print(len(card))print(choice(card))print("-----------------------------")class Vector(object):    def __init__(self, x, y):        self.x = x        self.y = y    def __mul__(self, scale):        return Vector(self.x * scale, self.y * scale)    def __add__(self, other):        x = self.x + other.x        y = self.y + other.y        return Vector(x, y)    def __abs__(self):        return hypot(self.x, self.y)    def __str__(self):        return "Vector(%r, %r)" % (self.x, self.y)v1 = Vector(4, 5)v2 = Vector(2, 3)v3 = v1 + v2print(v3)print(abs(v3))print(v3*2)

_len_,:当我们调用len()函数来求对象的长度时就会调用对象中的_len_函数
_repr__str_:用法差不多相同,都可在print()函数中被使用,区别在于后者可以在str()函数中调用。
_getitem_:使得类可以像数组那样给定指定值,并返回该值所在位置的元素
_add_,_abs_,_mul_:实现算法操作,分别实现加法,求直角边,乘法
结果如下:
这里写图片描述


这里还有其他一些特殊方法

暂时就不一一介绍了,如果以后遇到再来补充
这里写图片描述

原创粉丝点击