下划线说明
头尾双下划线
例如__init__(),定义的是特殊方法,一般是系统定义名字
双下划线
以双下划线开头的变量为类的私有变量(private),只允许这个类本身访问,例如__var
单下划线
以单下划线开头的变量为保护类型的变量(protected),只允许这个类和其子类访问
Python不允许实例化对象访问类的私有数据,但是可以利用object._className__attr来访问属性,例如:
>>> class MyClass():
__var=10
>>> c=MyClass()
>>> c.__var
Traceback (most recent call last):
File "", line 1, in
c.__var
AttributeError: 'MyClass' object has no attribute '__var'
>>> c._MyClass__var
10
>>>
内置类属性
__dict__ : 类的属性(包含一个字典,由类的数据属性组成)
__doc__ :类的文档字符串
__name__: 类名
__module__: 类定义所在的模块(类的全名是'__main__.className',如果类位于一个导入模块mymod中,那么className.__module__ 等于 mymod)
__bases__ : 类的所有父类构成元素(包含了一个由所有父类组成的元组)
>>> class MyClass():
'这是类的文档'
publicVar=10
def __init__(self,varA,varB):
self.varA='aa'
self.varB='bb'
def displayVar(self):
print('varA =',self.varA)
print('varB =',self.varB)
print('publicVar=',MyClass.publicVar)
>>> MyClass.__doc__ # 类的文档字符串
'这是类的文档'
>>> MyClass.__name__ # 类名
'MyClass'
>>> MyClass.__module__ # 类定义所在的模块
'__main__'
>>> MyClass.__bases__ # 类的父类,默认所有类继承自object类
(,)
>>> MyClass.__dict__ # 类的属性,返回一个字典
mappingproxy({'__module__': '__main__', '__doc__': '这是类的文档', 'publicVar': 10, '__init__': , 'displayVar': , '__dict__': , '__weakref__': })
>>>
基本重载方法
可以在自己的类中重写方法
方法名
描述
__init__(self[,args..])
构造函数
__del__(self)
析构函数
__repr__(self)
转化为供解释器读取的形式
__str__(self)
将值转化为适于人阅读的形式
__cmp__ (self,x)
对象比较
对象销毁机制
Python 使用了引用计数这一简单技术来跟踪和回收垃圾,当一个对象没有被引用时就会被自动释放,但是释放并不是立即的,而是解释器在合适的时机将垃圾对象的内存回收。
>>> class MyClass():
def __del__(self):
print('delete this object')
def __init__(self):
print('init this object')
>>> c= MyClass() # 引用为1
init this object
>>> b=c # 引用为2
>>> d=b # 引用为3
>>> del c # 引用为2
>>> del b # 引用为1
>>> del d # 引用为0 准备释放内存
delete this object
>>>
利用内置函数访问属性
可以使用以下函数的方式来访问属性:
getattr(obj, name[, default]) : 访问对象的属性。
hasattr(obj,name) : 检查是否存在一个属性。
setattr(obj,name,value) : 设置一个属性。如果属性不存在,会创建一-个新属性。
delattr(obj, name) : 删除属性。
hasattr(emp1, 'age') # 如果存在 'age' 属性返回 True。
getattr(emp1, 'age') # 返回 'age' 属性的值
setattr(emp1, 'age', 8) # 添加属性 'age' 值为 8
delattr(emp1, 'age') # 删除属性 'age'
# 属性名记得加单引号,否则会认为是一个与属性名同名的变量