类的特殊(高级)成员方法

1.__doc__ 表示类的描述信息

class student(object):
    "这个类是描述学生信息的"
    def __init__(self,name,age):
        self.name=name
        self.age=age
        print("--Name is %s,Age is %s"%(self.name,self.age))
s1=student("Lily",25)
print(student.__doc__)

 运行结果:

--Name is Lily,Age is 25
这个类是描述学生信息的

 2. .__init__ 构造方法,通过类创建对象时,自动触发执行。

    __del__ 析构方法,当对象在内存中被释放时,自动触发执行

    __module__ : 输出当前实例所用的类是从哪个模块导入的

   __class__ : 输出当前实例所用的类

  

class C:

    def __init__(self):
        self.name = 'wupeiqi'

 

from lib.aa import C

obj = C()
print(obj.__module__)  # 输出 lib.aa,即:输出模块
print(obj.__class__)      # 输出 lib.aa.C,即:输出类

 

3.    __call__ : 对象后面加括号,触发执行。

    (注:构造方法的执行时由创建对象触发的,即:对象=类名();

       而对于__call__方法的执行是由对象后加括号触发的,即: 对象()或者类()())

 

class student(object):
    def __init__(self,name):
        self.name=name

    def __call__(self,*args,**kwargs):
        print("running call",args,kwargs)

s1=student("Lily")
s1()
student("Lily")()
s1(1,2,3,name="Lily")

运行结果:

running call () {}
running call () {}
running call (1, 2, 3) {'name': 'Lily'}

 4.     __dict__ 查看类或对象中的所有成员

class student(object):
    def __init__(self,name,age):
        self.name=name
        self.age=age
        print("--Name is %s,Age is %s"%(self.name,self.age))
    def __call__(self,*args,**kwargs):
        print("running call",args,kwargs)
s1=student("Lily",25)
s1(1,2,3,name="Lily")
print(student.__dict__) #打印类里的所有属性,不包括实例属性
print(s1.__dict__) #打印所有实例属性,不包括类属性

 运行结果:

--Name is Lily,Age is 25
running call (1, 2, 3) {'name': 'Lily'}
{'__init__': <function student.__init__ at 0x00000000007E4488>, '__weakref__': <attribute '__weakref__' of 'student' objects>, '__dict__': <attribute '__dict__' of 'student' objects>, '__module__': '__main__', '__doc__': None, '__call__': <function student.__call__ at 0x00000000007E4598>}
{'name': 'Lily', 'age': 25}

 4. __str__ 如果一个类中定义了__str__方法,那么在打印对象的时候,默认输出该方法的返回值。

    直接打印实例名的话,打印出来的是方法的的内存地址。

    加上__str__(self)以后,打印出来的就是具体的返回值了。

 

class student(object):
    def __init__(self,name):
        self.name=name

s1=student("Lily")
print(s1)

s2=student("Lucy")
print(s2)

 运行结果:

<__main__.student object at 0x0000000000C62FD0>
<__main__.student object at 0x0000000000C62BE0>

 

 

class student(object):
    def __init__(self,name):
        self.name=name
    def __str__(self):
        return "obj is %s"%self.name

s1=student("Lily")
print(s1)

 运行结果:

obj is Lily

 5.  __getitem__、__setitem__、__delitem__

    用于索引操作,如字典。以上分别表示获取、设置、删除数据。把实例变成了一个字典。

class Foo(object): #key键-value值
    def __init__(self):
        self.data={}
    def __getitem__(self, key):
        print('__getitem__', key)
        return self.data.get(key)
    def __setitem__(self, key, value):
        print('__setitem__', key, value)
        self.data[key]=value
    def __delitem__(self, key):
        print('__delitem__', key)

obj = Foo()
obj['age']=19  # 自动触发执行 __setitem__
print(obj['age']) #自动触发执行 __getitem__
print(obj.data)
del obj["age"]  #自动触发执行 __delitem__

 运行结果:

__setitem__ age 19
__getitem__ age
19
{'age': 19}
__delitem__ age

 

posted on 2017-07-31 14:05  momo8238  阅读(150)  评论(0编辑  收藏  举报