第二章:魔法方法

1.什么是魔法方法

魔法方法就是可以给你的类增加特殊功能的方法,通常是系统自定好的已双下划线开头以及双下划线结尾的的方法.如果你自己写的类重写了这些方法,那么这个方法就会在特殊的情况下被python调用,你可以自己定义想要的行为,而这一切都是自动发生的.例如__init__(),__new__(),__call__(),__getItem__()
注意: 魔法方法和继承没有关系,只要是在一个类中实现了这些方法,它就会在特殊的情况下被调用

# encoding:utf-8
__author__ = 'Fioman'
__time__ = '2019/3/14 11:39'


class Company(object):
    def __init__(self, employee_list):
        self.employee = employee_list

    # 让这个类创建的对象,是可以迭代的,就是可以遍历的
    def __getitem__(self, item):
        return self.employee[item]


company = Company(['tom', 'bob', 'jane'])
employee = company.employee
for em in employee:
    print(em)

company2 = company
for em in company2:  # 如果company类没有实现__getitem__方法,这里会报错误
    print(em)

2.Python常见的魔法方法

1. 字符串表示 __repr__ 和 __str__
区别:它们都是可以将我们的类对象表示成为一个字符串.但是__str__一般是用来给用户看的,便于理解.
__repr__一般是用来给程序员看的,在开发模式下,直接写一个对象的时候,就会调用它的__repr__方法.

注意: 如果一个类中既有__str__方法,又有__repr__方法.
一般在调用print进行显示的时候,会优先调用__str__方法
repr方法一般是表示一个对象的创建信息,程序员可以看懂的方式,比如返回这个对象的继承关系等.

2.len函数的特殊性
我们在使用len(内置类型) 比如list,dict,set,tuple的时候,我们的len()一般不会遍历这些数据的个数,因为这些数据结构都是C语言实现的,在内部存放一个变量,来时刻记录着这些容器的大小,所以len会直接返回这个变量的结果,所以效率是非常高的

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,136评论 1 32
  • 人总是在遇到事情的时候容易多愁善感,想的多,自然感触也多。 大娘去世了!其实我内心并没有多难受的,愿因是她并没有疼...
    浅吟_低唱阅读 166评论 0 0
  • 倒数16天 今天穿了一件棉麻的外搭里面是一个吊带背心,下面是牛仔裤,可老妈慢悠悠的说不好看!我说我觉得挺好看的!...
    风筝2017阅读 186评论 0 0
  • 斩荆破奴逆风飞, 大浪淘尽千层沙, 回首望 零星知音和着歌 来,来,来 并肩笑傲奏广陵
    纵情嬉戏天地间阅读 199评论 0 0
  • 备香 一、 “大小姐驾到,统统都闪开” 话音刚落,一个灵巧的身影从草丛中窜出,紧接着就是一个子弹打出。后羿头顶...
    哇奥喵酱阅读 734评论 0 1