Python 进阶 笔记
慕课网 Python 进阶 http://www.imooc.com/learn/317 笔记
# start:
pass
# 定义Person类的__init__方法,除了接受 name、gender 和 birth 外,还可接受任意关键字参数,并把他们都作为属性赋值给实例:
class Person(object):
count = 0 #定义类属性
def __init__(self, name, gender, birth, **kw):
self.name = name
self.gender = gender
self.birth = birth
for k, v in kw.iteritems():
setattr(self, k, v)
Person.count += 1
当实例属性和类属性重名时,实例属性优先级高,它将屏蔽掉对类属性的访问。
双下划线开头“__xx”的属性不能直接被外部访问,但是“__xx__”形式的属性可以,很多预定义的特殊属性才用这种格式
实例方法和类方法:特殊属性可以在类的内部访问,实例方法即类中定义的函数,在实例上调用;类方法是加了@classmethond的实例方法
#类的继承:
class 子类(父类):
def __init__(self, name, gender, course): #依然是列出所有实例
super(子类, self).__init__(name, gender) #必须对继承项初始化,注意各处标点及self的位置
self.course = course #只需定义新实例
支持多重继承
因为Python支持高阶函数,在函数式编程中我们介绍了装饰器函数,可以用装饰器函数把 get/set 方法“装饰”成属性调用:
class Student(object):
def __init__(self, name, score):
self.name = name
self.__score = score
@property
def score(self):
return self.__score
@score.setter
def score(self, score):
if score < 0 or score > 100:
raise ValueError('invalid score')
self.__score = score
注意: 第一个score(self)是get方法,用@property装饰,第二个score(self, score)是set方法,用@score.setter装饰,@score.setter是前一个@property装饰后的副产品。
__slots__ = ('属性名', '属性名', '属性名') #定义类允许的属性列表
__call__ 把实例变成函数

浙公网安备 33010602011771号