__slots__=()
,限制可动态绑定的属性
def __str__(self)
,print的打印方式
def __iter__(self),def next(self)
,循环调用iter返回迭代对象(可迭代对象iterable与迭代器对象iterator)的next()方法,使类具有类似list/tuple的迭代功能
yield
将函数对象变为生成器generator
with
语法糖,对象必须有一个enter()方法,一个exit()方法。(with如何工作)
__getitem__(self,)
,实现下标访问或者切片访问
__getattr__(self,)
,访问类不存在的属性时调用,可以用来做REST API链式调用
__call__(self)
,将实例当作函数来调用,通过callable()判断一个对象是否是”可调用”对象
type()
函数既可以返回一个对象的类型,又可以创建出新的类型,type(class的名字,(基类,),dict(方法名=函数地址,))
__metaclass__
类创建类,从type类继承,重载def __new__(cls,name,bases,attrs)
方法
__私有变量名
实际上被转换成了_classname__私有变量名
,即无法限制你访问私有成员变量
类属性与实例属性
class S{name='A1'}
S s1
>>>s1.name
>>>'A1'#类属性
>>>s1.name='B1'#实例属性
>>>s1.name
>>>'B1'
>>>del B1.name#删除类属性
>>>B1.name
>>>'A1'#实例属性不存在时,会访问类属性。
为什么会访问到类属性呢?
1.那么Python里的类和其他的对象有什么区别?
实例是对象,因为创建实例的是类.类是对象,创建类的是什么呢?Python给的答案就是元类.你可以通过type()函数来查看它的元类.(type(type)得到的是它自己)
2.Python中属性查找机制
python调试方法
1.try...except...else...finally
except相当于elif所以碰到一个满足条件的后面的except就会被屏蔽,而且子类错误对象可以被父类except接收,但是父类错误对象则不会被子类接收。
2.assert True,'xxx'
断言执行结果与True的内容是否相符,不符合则打印‘xxx’。好处是可以在运行时选择关闭assert,避免了一行行删除print语句
3.logging
定义出错记录位置,可以自定义记录哪些等级的错误信息。
4.pdb