一、类成员的修饰符
类的所有成员在Python面向对象的成员组成部分已经详细介绍了,对于每个成员而言,都有两种形式:
- 公有成员,在任何地方都能访问
- 私有成员,只有在类的内部才能访问
私有成员和公有成员在定义的时候不同:私有成员命名时,需要在前面加上两个下划线,特殊成员除外(init、str、dict)
class TestObj:
def __ init__(self):
self.name = '公有变量'
self.__age = '私有变量'
1、 其中公有静态字段和私有静态字段也是一样,私有的只能在类的内部访问,公有静态在派生类中也可以访问
class C:
name = '老李' # 静态公有字段
__age = '20' # 静态私有字段
def get_name(self):
return C.name
def get_age(self):
return C.__age
class B(C):
def show():
return C.name
def show_age():
return C.__age
C.name # 类访问
C.__age # 错误
p = C()
p.get_name() # 类内部访问
p.get_age() # 类内部访问成功
o = B()
o.show() # 派生类访问
o.show_age # 访问错误
如果需要强制访问私有变量,可以通过 【对象.类名_私有字段】(o._C__age),不建议强制访问私有成员
二、类的特殊成员
1 、__doc__
: 表示类的描述信息
class Test:
"""这里是描述信息"""
pass
p = Test()
p.__doc__
2、__module__
:表示当前操作的对象在哪个模块
3、__class__
:表示当前操作对象的类是什么
4、__init__
:构造方法,通过类创建对象时,自动触发执行
5、__del__
:构造方法,当对象在内存中释放是,自动触发执行,不过Python是高级语言,有自己的一套触发回收机制
6、__call__
:对象后面的括号触发执行的
__init__
在创建对象是执行,即:对象 = 类()
__call__
是是有对象后面的括号触发的,即 对象() 或 类()()
class Test:
def __init__(self):
pass
def __call__(self):
print("__call__")
p = Test() # 调用__init__
p() # 调用__call__
7、__dict__
:返回类或对象中的所有成员
8、__str__
:如果定义了这个方法,在打印对象时,默认输出改方法的返回值
9、__getotem__、__setitem__、__delitem__
:用于索引操作,如字典,以上分别表示获取、设置、删除数据
class Test:
def __init__(self):
self.dic = {}
def __getitem__(self, item):
if item in self.dic:
return self.dic[item]
return None
def __setitem__(self, key, value):
self.dic[key] = value
def __delitem__(self, key):
del self.dic[key]
p = Test()
p['laoer'] = 12
print(p['laoer']) # 12
print(p['laoli']) # None
del p['laoer']
print(p['laoer']) #None
10、__getslice__
、__setslice__
、__delslice__
:用于切片操作,如列表
11、__iter__
:用于迭代器,之所以列表、元组、字典可以进行for循环,就是因为类型定义了iter
class Test:
def __init__(self, list):
self.dic = list
def __iter__(self):
return iter(self.dic)
p = Test([2, 34, 32, 12])
for i in p:
print(i)
12、其他的特殊成员以后慢慢补充
网友评论