设为首页 收藏本站
查看: 792|回复: 0

[经验分享] python中类的魔术方法

[复制链接]

尚未签到

发表于 2018-8-9 10:21:57 | 显示全部楼层 |阅读模式
  目的:学习python中class的magic methods,提高编程效率。
  环境:ubuntu 16.4   python 3.5.2
  在学习class时一定会接触到它的magic methods,比如常用__init__,形式都是前后有双下划线。除了这个必须的,还有其他有用的方法,下面大概的介绍一下。
  运算魔术方法:
  __add__ 用作 +
  __sub__ 用作 -
  __mul__ 用作 *
  __truediv__用作/
  __floordiv__用作//
  __mod__用作%
  __pow__用作**
  __and__用作&
  __xor__用作^
  __or__用作|
  举例说明:
class SpecialString:  
    def __init__(self, cont):
  
        self.cont = cont
  

  
    def __truediv__(self, other):
  
        line = '=' * len(other.cont)
  
        return rn.join([self.cont, line, other.cont])
  

  
spam = SpecialString('spam')
  
hello = SpecialString('Helo world!')
  
print(spam/hello)
  

  
# 结果
  
>>>
  
spam
  
============
  
Hello world!
  
>>>
  x + y 相当于 x.__add__(y), 但是如果x没有__add__方法,且x和y是不同的类,那么就会检查y有没有__radd__,有则表示为y.__radd__(x),没有则出现TypeError,所有的megic methods都有r methods。
  比较魔术方法:
  __lt__  用作 <
  __le__ 用作 <=
  __eq__ 用作 ==
  __ne__ 用作 !=
  __gt__ 用作 >
  __ge__ 用作 >=
  如果__ne__不存在,则返回__eq__的方向。
  举例说明:
class SpecialString:  
    def __init__(self, cont):
  
        self.cont = cont
  

  
    def __gt__(self, other):
  
        for index in range(len(other.cont) + 1):
  
            result = other.cont[:index] + '>' + self.cont
  
            result += '>' + other.cont[index:]
  
            print(result)
  

  
spam = SpecialString('spam')
  
eggs = SpecialString('eggs')
  
spam > eggs
  

  

  
# result
  

  
>>>
  
>spam>eggs
  
e>spam>ggs
  
eg>spam>gs
  
egg>spam>s
  
eggs>spam
  
>>>
  类似容器的魔术方法:
  __len__用作 len()
  __getitem__ 用作进行索引
  __setitem__ 用作分配索引
  __delitem__ 用作删除索引
  __iter__ 用作迭代对象
  __contains__用作in
  举例说明:
class VagueList:  
    def __init__(self, cont):
  
        self.cont = cont
  

  
    def __getitem__(self, index):
  
        return self.cont[index + random.randint(-1, 1)]
  

  
    def __len__(self):
  
        return random.randint(0, len(self.cont) * 2)
  

  
vague_list = VagueList(['A', 'B', 'C', 'D', 'E'])
  
print(len(vague_list))
  
print(len(vague_list))
  
print(vague_list[2])
  
print(vague_list[2])
  

  

  
#result
  
>>>
  
2
  
2
  
C
  
D
  
>>>
  参考文档来源:sololearn

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-549031-1-1.html 上篇帖子: python 读取 配置文件 下篇帖子: centos默认python2.6升级到python2.7,并用pip方式安装python工具包。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表