访问修饰符
- 公有成员
默认情况 - 私有成员
用双下横线声明
私有成员不可在外部及子类访问,也不允许被继承 - 特殊成员
方法
__new__
:构造函数,创建实例的方法,返回实例
__init__
:初始化函数,在new的内部调用
__repr__
:实例被直接打印时调用,打印返回值
__call__
:实例当函数被调用时执行
__iter__
:返回迭代器iter(),实例被迭代时先调用此函数
属性方法
__getitem__
:下标读取属性不存在时调用
__setitem__
:下标设置属性时调用,self.dict[k]=v
__delitem__
:下标删除实例属性时调用
__getattr__
:【.】操作读取属性时调用
__getattribute__
:【.】操作读取属性时调用,定义后getattr不生效
__setattr__
:【.】操作设置属性时调用
__delattr__
:【.】操作删除实例属性时调用
类型转换方法
__int__
:被int包裹时调用,返回转换结果
__str__
:被str包裹时调用,返回转换结果
运算符重载
__add__
:加法,返回运算结果,add(self,other)
实例属性
__class__
:返回实例所在的类
__dict__
:实例属性列表
__doc__
:类文档,help(类或者实例)
类属性
__bases__
:当前类的所有父类
类相关内置函数
type(name,bases,dict)
元类构造对象
isinstance(object,classinfo)
:判断实例是否属于类
issubclass(class,classinfo)
:判断继承关系
hasattr(object,name)
:判断实例属性是否存在
getattr(object,name)
:获取实例属性值
setattr(object,name,value)
:设置实例属性
delattr(object,name)
:删除实例属性
super(type[, object-or-type])
:返回值可以直接调用其父类属性
外部添加变量
import types
class obj:
def __init__(self):
pass
o1=obj()
o2=obj()
- 变量
# 静态变量
# 严格说没有指针概念的python不支持静态变量
# 被修改过的实例不会被同化,浅复制逻辑
obj.attr_ac='attr_ac'
# 实例变量
o1.attr_dy='attr_dy'
- 方法
# 静态方法(不需要self参数)
@staticmethod
def fc_sc():
print('fc_sc')
obj.fc_sc=fc_sc
o1.fc_sc()
# 实例方法
def fc_dy(self):
print('fc_dy')
o1.fc_dy=types.MethodType(fc_dy,o1)
o1.fc_dy()
print([x for x in dir(o1) if not x.endswith('__')])
print([x for x in dir(o2) if not x.endswith('__')])