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_:实现算法操作,分别实现加法,求直角边,乘法
结果如下:
这里还有其他一些特殊方法
暂时就不一一介绍了,如果以后遇到再来补充
阅读全文
0 0
- Python进阶(五):特殊方法
- Python 进阶特殊方法
- [Python进阶-5]类的特殊方法
- python[五]:python爬虫进阶
- Python Study (01) 之 特殊方法
- Python中的特殊方法
- Python的特殊方法
- Python点滴(五)-pandas进阶
- Python进阶-类的特殊成员
- python爬虫进阶(五):数据的存储
- python进阶----魔术方法
- Python进阶(五)-浅谈python匿名函数
- Python进阶:Python魔法方法
- 【颗粒归仓】(五)批量删除方法进阶
- spark进阶(五)
- Dagger2 进阶(五)
- 【转】 python特殊方法函数
- PYTHON类的特殊方法
- Android studio3.0 com.android.tools.aapt2.Aapt2Exception: AAPT2 error
- iptables导致linux关机错误的解决方法
- CentOS 7.4下使用yum安装MySQL
- C++#ifndef/#define/#endif的用法
- ue4 ApplyRadialDamage
- Python进阶(五):特殊方法
- struts-config.xml配置文件的scope
- web service错误Use @XmlType.name and @XmlType.namespace to assign different names to them.
- 如何用低廉的成本高效提高事务吞吐量
- Replugin插件化框架简要分析
- 2-2 Time类的定义
- Educational Codeforces Round 30C-模拟&贪心-Strange Game On Matrix
- Android : 隐藏软键盘
- Eric6与pyqt5学习笔记 2【页面基本布局】