特殊方法

面向对象中除了__init__之外还有很多特殊方法

1.__init__ :数据初始化,当类名()进行调用的时候会自动执行

class ms(object):
    def __init__(self,a1,a2):
        self.a1=a1
        self.a2 = a2
obj = ms(12,34)

 

2.__call__:对象() 自动执行 __call__,有返回值

class ms(object):

    def __call__(self, *args, **kwargs):
        print(666,args,kwargs)
        return 123

ret = obj(2,3,4,k=234)
<<<<
666 (2, 3, 4) {'k': 234}

 

3.__getitem__ / __setitme__  /  __delitme__

主要用于索引操作

class ms(object):

    def __getitem__(self, item):   # 获取
        print(item)
        return 8

    def __setitem__(self, key, value):  #设置
        print(key,value,1234)

    def __delitem__(self, key):  # 删除
        print(key)

obj = ms(1,2)
ret = obj["666"]   #对象["..."] 自动执行

obj["k1"]="123"   # 对象[" "]=11 自动执行 无返回值

del obj["123"]     # del 对象[' '] 自动执行  无返回值

6.__add__  对象+对象

class ms(object):
    def __init__(self,a1,a2):
    self.a1=a1
    self.a2 = a2    

    def __add__(self, other):
        return self.a1 + other.a2

obj1 = ms(2,4)
obj2 = ms(44,55)
ret = obj1+obj2     # 对象+对象       自动执行
print(ret)
<<<<57

 

7.__enter__ 和 __exit__

class ms(object):

    def __enter__(self):    
        print(111)
        return 999

    def __exit__(self, exc_type, exc_val, exc_tb):
        print(222222)

#with 对象   自动执行 __enter__ / __exit__ 这两个要用就要一起用

with ms(2,3) as f:      # 这里的as 接收的是返回值
    print(f)
    print(1234)
<<<<
111
999
1234
222222

 

8.__new__  : 真正的构造方法 在执行__init__ 之前会执行__new__创建一个空的对象

class ms(object):
    def __init__(self,a1,a2):     # 初始化方法
        self.a1=a1
        self.a2 = a2
    def __new__(cls, *args, **kwargs):    #  构造方法
        print(2)
        return object.__new__(cls)  # python 内部创建一个当前类的对象(初创时内部是空的)

obj = ms(1,2)
print(obj.a1)
<<<<
2
1

 

9.__str__

class ms(object):
    def __str__(self):   当一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值
    return "display"

obj = ms()
print(obj)
<<<
display

 

10.__doc__

用于查看类的文档信息(类的注释)

class foo(object):
    """
    人生苦短我用python
    """

    def func(self):
        pass

print(foo.__doc__)

<<<<
人生苦短我用python

11.__dict__

查看类或对象里的所有成员

class foo(object):

    county = "China"
    def __init__(self):
        self.num = 12
        self.age = 20

print(foo().__dict__)  # 查看对象里的所有成员
print(foo.__dict__)    # 查看类里的所有成员

 

12.__iter__

如果需要对象可循环就要在类里面加

class foo(object):

    county = "China"
    def __init__(self,num):
        self.num = num
    def __iter__(self):
        return iter(self.num)


obj = foo([11,22,33,55,66])
for item in obj:
    print(item)

 

posted @ 2019-08-22 18:57  tiwe  阅读(206)  评论(0编辑  收藏  举报