-
与属性类似,方法也分为实例方法和类方法。
在class中定义的全部是实例方法,实例方法第一个参数self是实例本身。要在class中定义类方法,必须标记一个@clsssmethod,将方法绑定到类上而非类的实例上。类方法的第一个参数将传入类本身,通常将参数命名为cls。
因为在类上调用而非实例上调用,一次类方法无法获得任何实例变量,只能获得类的引用。
如果类属性为私有属性,则外部无法读取,但可以通过一个类方法获取。
查看全部 -
class中的定义的实例方法其实也是属性,它实际上是一个函数对象(没有括号时返回的是一个绑定到实例的函数对象,打括号时才是方法调用)。
可用types.MethodType()把一个函数变为一个方法,然后动态地添加到实例上。
给一个实例动态添加方法并不常见,直接在class中定义要更直观)
查看全部 -
除了定义实例的属性外,还可以定义实例的方法。
实例的方法就是在类中定义的函数(它的第一个参数永远是self,指向调用该方法的实例本身)。调用方法必须在实例上调用。在实例方法内部可以访问所有实例属性,这样如果外部需要访问私有属性,可以通过方法调用获得,这种数据封装的形式除了能保护内部数据一致性外,还可以简化外部调用的难度。
查看全部 -
当实例属性和类属性重名时,实例属性优先级高,它将屏蔽掉对类属性的访问。当实例属性没有被单独设置或设置后被删除,则返回类属性的值。
实例内部可以调用私有属性,只是在外部没法访问。(即可在__init__函数内部输出私有属性)
查看全部 -
实例属性每个实例各自拥有,相互独立,而类属性有且只有一份。
定义类属性可以直接在class中定义,访问类属性不需要创建实例就可以直接访问,同时,所所有的实例都可以访问到它所属的类的属性。
查看全部 -
定义类的实例属性时,python根据属性名来对属性权限进行控制。
双下划线开头:__xxx 不能直接被外部访问
双下划线开头,双下划线结尾:__xxx__ 可以被外部访问,在python的类中被称为特殊属性(有很多预定义的特殊属性可以使用,通常我们不要把普通属性以这种方式命名)
单下划线开头: _xxx 虽然可以为外部访问,但是按照习惯不应该被外部访问
查看全部 -
利用__init__()方法给一种类型的实例绑定拥有相同名字的属性。__init__方法的第一个参数必须是self(也可以用别的名字,但建议使用习惯用法),后续参数可自由指定,和定义函数类似。相应地,创建实例时就必须要提供self以外的参数。
查看全部 -
try...except语句:
用try来捕获错误,并在捕获到指定错误时执行except语句。
查看全部 -
在使用decorator的情况下,decorator会改变函数的__name__,__doc__等其它属性(返回的函数名不再是原函数的函数名,而是@log内部定义的wrapper),因此需要把原函数的一些属性复制到新函数中。
复制时,使用python内置的functools可以自动化完成。
@functools.wraps(f)
但是仍然无法获得原始函数的参数信息,参数名等仍可能有所改变。
查看全部 -
利用三层嵌套的decorator来实现带参数的装饰器语句。
查看全部 -
装饰器函数如@log写死了只含一个参数的返回函数,要让@log自适应任何参数定义的函数,可以利用python中的*args和**kw,保证任意个数的参数总是能正常调用。
计算函数调用的时间:记录调用前后的当前时间戳,然后计算两个时间戳的差。
查看全部 -
匿名函数:
lambda x: f(x)
关键字lambda表示匿名函数,冒号前的x表示函数参数,冒号后,为表达式,只能有一个表达式,不写return,返回值就是该表达式的结果。
匿名函数可以不必定义函数名而直接创建一个函数对象,从而简化代码。
查看全部 -
但 sorted()也是一个高阶函数,它可以接收一个比较函数来实现自定义排序,比较函数的定义是,传入两个待比较的元素 x, y,如果 x 应该排在 y 的前面,返回 -1,如果 x 应该排在 y 的后面,返回 1。如果 x 和 y 相等,返回 0。
查看全部 -
return math.sqrt(x).is_integer() 内置函数,判断是否为整数
查看全部 -
filter()函数是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。
查看全部
举报