标签:return 调用 创建 str 成员方法 attribute 返回值 ref 垃圾回收
前面我们讲了类的方法,有普通方法,就是我们自己定义的方法,还有静态方法,类方法,属性方法,其实类还有另外一种方法,叫做类的特殊成员方法
说明:表示类的描述信息
class Dog(object):
"""此类是形容Dog这个类""" #类的描述信息
def __init__(self,name):
self.name = name
print(Dog.__doc__) #打印类的描述信息
#输出
此类是形容Dog这个类
说明:
说明:构造方法,通过类创建对象时,自动触发执行
说明:析构方法,当对象在内存中被释放时,自动触发执行
注:此方法一般无须定义,因为Python是一门高级语言,程序员在使用时无需关心内存的分配和释放,因为此工作都是交给Python解释器来执行,所以,析构函数的调用是由解释器在进行垃圾回收时自动触发执行的
说明: 对象后面加括号,触发执行
class Foo(object):
def __init__(self):
self.name = "shuaigaogao"
def __call__(self, *args, **kwargs): #重写call方法
print("running call",args,kwargs)
f = Foo() #执行__init__
f(1,2,3,name=333) # 执行call方法,也可以写成 Foo()(1,2,3,name=333)
#输出
running call (1, 2, 3) {‘name‘: 333}
注:构造方法的执行是由创建对象触发的,即:对象 = 类名() ;而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()()
说明: 查看类或对象中的所有成员
①类.__dict__
效果:打印类中所有的属性,不包括实例属性
class Province(object):
country = ‘China‘
def __init__(self, name, count):
self.name = name
self.count = count
def func(self, *args, **kwargs):
print("func")
print(Province.__dict__) #类.__dict__
#输出
{‘__doc__‘: None, ‘__weakref__‘: <attribute ‘__weakref__‘ of ‘Province‘ objects>, ‘__init__‘:
<function Province.__init__ at 0x00000247F3CAD488>, ‘country‘: ‘China‘, ‘__dict__‘:
<attribute ‘__dict__‘ of ‘Province‘ objects>, ‘func‘: <function Province.func at
0x00000247F3CAD510>, ‘__module__‘: ‘__main__‘} #打印类中所有的属性,不包括实例属性
②实例名.__dict__
效果:打印该实例的所有属性,不包括类属性
class Province(object):
country = ‘China‘
def __init__(self, name, count):
self.name = name
self.count = count
def func(self, *args, **kwargs):
print("func")
p = Province("jiangsu",20000) #实例化
print(p.__dict__) #实例名.__dict__
#输出
{‘count‘: 20000, ‘name‘: ‘jiangsu‘} #打印该实例的所有属性,不包括类属性
说明:如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值
class Province(object):
country = ‘China‘
def __init__(self, name):
self.name = name
def __str__(self):
return "<obj:{0}>".format(self.name)
p = Province("jiangsu")
print(p) #打印这个对象
#输出
<obj:jiangsu> #给对象重新起了一个名字
注:这个以后会在django框架里面会用到,这边就不多说了
说明:用于索引操作,如字典。以上分别表示获取、设置、删除数据
class Foo(object):
def __getitem__(self, key):
print(‘__getitem__:‘,key)
def __setitem__(self, key, value):
print(‘__setitem__:‘,key,value)
def __delitem__(self, key):
print(‘__delitem__‘,key)
f = Foo()
f["name"] = "shuaigaogao" #自动触发__setitem__方法
f["name"] #自动触发__getitem__方法
del f["name"] #自动触发__delitem__方法
#输出
__setitem__: name shuaigaogao
__getitem__: name
__delitem__ name
注:这边的__delitem__没有做真正的删除,只是触发这个方法,想要真正删除,只需要在__delitem__函数中添加删除功能即可
标签:return 调用 创建 str 成员方法 attribute 返回值 ref 垃圾回收
原文地址:http://www.cnblogs.com/xiangjun555/p/6994337.html