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__ 把实例变成函数

posted @ 2017-06-17 22:25  聪子童鞋  阅读(194)  评论(0)    收藏  举报