python -- 面向对象 -- 特殊成员方法
python -- 面向对象 -- 特殊成员方法
__doc__ 类的描述信息
class Foo(object):
'''这个是一个普通的类'''
pass
print(Foo.__doc__) # 这个是一个普通的类
__module__ 和 __class__
-
__module__表示当前操作的对象在那个模块
-
__class__表示当前操作的对象的类是什么
__init__构造方法,通过类创建对象时,自动触发执行。
__del__ 析构方法,当对象在内存中被释放时,自动触发执行。
__call__ 对象后面加括号,触发执行。
class Foo(object):
def __call__(self, *args, **kwargs):
print('WTF? {0} {1}'.format(args,kwargs))
obj1 = Foo()
# 以下就是__call__的用法,可以再加上括号执行。
obj1(1,2,3,4,5,name='Gao', age = '30') # obj1()
'''
以下是程序的结果:
WTF? (1, 2, 3, 4, 5) {'name': 'Gao', 'age': '30'}
'''
__dict__ 查看类或对象中的所有成员。
class Foo(object):
def a(self):
pass
def __call__(self, *args, **kwargs):
print('WTF? {0} {1}'.format(args,kwargs))
# 使用__dict__方法,是不需要实例化类,就可以使用
print(Foo.__dict__)
class Foo(object):
def __init__(self, name, age):
self.NAME = name
self.AGE = age
def a(self):
pass
def __call__(self, *args, **kwargs):
print('WTF? {0} {1}'.format(args,kwargs))
# 使用__dict__方法,是不需要实例化类,就可以使用,不打印实例的属性
print(Foo.__dict__)
# 实例化后再使用__dict__,只打印实例的属性,不再打印类的属性
obj1 = Foo('Gao', '30')
print(obj1.__dict__) # {'NAME': 'Gao', 'AGE': '30'}
__str__ 查看类或对象中的所有成员。
class Foo(object):
def __init__(self, name, age):
self.NAME = name
self.AGE = age
def __str__(self):
return '<obj:{0}>'.format(self.NAME)
# 使用__str__方法,可以看到对象的信息,如果不加__str__就会显示相对不太友好的内容
# 注意__str__的写法,使用return
print(Foo)
obj1 = Foo('Gao', '30')
print(obj1)
'''
以下是程序的结果:
<class '__main__.Foo'>
<obj:Gao>
'''
__getitem__ __setitem__ __delitem__
class Foo(object):
data = {}
def __init__(self, name, age):
self.NAME = name
self.AGE = age
# self.data = {} # 这里的效果在某种场景下同上面的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)
obj1 = Foo('Gao', 30)
# 以下就触发了__getitem__的用法
res = obj1['key']
# 以下就触发了__setitem__的用法
obj1['key_1'] = 'value_1'
print("This's the dict of data in the class of Foo: ",obj1.data)
# 以下就触发了__delitem__的用法,key3不在data字典中,也是可以被调用
del obj1['key3']
'''
以下是程序的结果:
触发了 __getitem__ : key
触发了 __setitem__ : key_1 value_1
This's the dict of data in the class of Foo: {'key_1': 'value_1'}
触发了 __delitem__ : key3
'''

浙公网安备 33010602011771号