-
__count是私有属性,外部无法修改其值
查看全部 -
类属性可以通过类名访问,也可以通过实例访问
查看全部 -
如果在类上绑定一个属性,则所有实例都可以访问类的属性,并且,所有实例访问的类属性都是同一个!也就是说,实例属性每个实例各自拥有,互相独立,而类属性有且只有一份。
查看全部 -
当实例属性和类属性重名时,实例属性优先级高,它将屏蔽掉对类属性的访问。
注:可见,千万不要在实例上修改类属性,它实际上并没有修改类属性,而是给实例绑定了一个实例属性。
查看全部 -
函数调用不需要传入 self,但是方法调用需要传入 self。
查看全部 -
我们在 class 中定义的实例方法其实也是属性,它实际上是一个函数对象
p1.get_grade 返回的是一个函数对象,但这个函数是一个绑定到实例的函数
因为方法也是一个属性,所以,它也可以动态地添加到实例上,只是需要用 types.MethodType() 把一个函数变为一个方法:
import types def fn_get_grade(self): if self.score >= 80: return 'A' if self.score >= 60: return 'B' return 'C' class Person(object): def __init__(self, name, score): self.name = name self.score = score p1 = Person('Bob', 90)p1.get_grade = types.MethodType(fn_get_grade, p1, Person)print p1.get_grade()# => Ap2 = Person('Alice', 65) print p2.get_grade()# ERROR: AttributeError: 'Person' object has no attribute 'get_grade' # 因为p2实例并没有绑定get_grade
给一个实例动态添加方法并不常见,直接在class中定义要更直观。
查看全部 -
在实例方法内部,可以访问所有实例属性,这样,如果外部需要访问私有属性,可以通过方法调用获得,这种数据封装的形式除了能保护内部数据一致性外,还可以简化外部调用的难度。
查看全部 -
加"__"指出此处为私有类属性,此属性只能于类内访问,或由类内提供方法访问
查看全部 -
原因是 p1.address = 'China'并没有改变 Person 的 address,而是给 p1这个实例绑定了实例属性address ,对p1来说,它有一个实例属性address(值是'China'),而它所属的类Person也有一个类属性address,所以:
访问 p1.address 时,优先查找实例属性,返回'China'。
访问 p2.address 时,p2没有实例属性address,但是有类属性address,因此返回'Earth'。
可见,当实例属性和类属性重名时,实例属性优先级高,它将屏蔽掉对类属性的访问。
可见,千万不要在实例上修改类属性,它实际上并没有修改类属性,而是给实例绑定了一个实例属性。
查看全部 -
类属性被所有实例所共享
__init__()函数每当有实例创建时都被调用
查看全部 -
Python内置的 sorted()函数可对list进行排序,但sorted()也是一个高阶函数
查看全部 -
Python对属性权限的控制是通过属性名来实现的,如果一个属性由双下划线开头(__),该属性就无法被外部访问。
但是,如果一个属性以"__xxx__"的形式定义,那它又可以被外部访问了,以"__xxx__"定义的属性在Python的类中被称为特殊属性,有很多预定义的特殊属性可以使用,通常我们不要把普通属性用"__xxx__"定义
以单下划线开头的属性"_xxx"虽然也可以被外部访问,但是,按照习惯,他们不应该被外部访问。
查看全部 -
Python 3.x已经改进了整数的除法运算,“/”除将得到浮点数,“//”除才仍是整数:
查看全部 -
decorator :传入一个函数,再decorator中定义一个新函数并再次函数中对传入函数进行修饰,之后将新函数return
要让 @log 自适应任何参数定义的函数,可以利用Python的 *args 和 **kw,保证任意个数的参数总是能正常调用:
def log(f): def fn(*args, **kw): print 'call ' + f.__name__ + '()...' return f(*args, **kw) return fn
查看全部 -
Python对属性权限的控制是通过属性名来实现的,如果一个属性由双下划线开头(__),
如:__job不能被外部访问
如果一个属性以"__xxx__"的形式定义,那它又可以被外部访问了
查看全部
举报