为了账号安全,请及时绑定邮箱和手机立即绑定
慕课网数字资源数据库体验端
python进阶_学习笔记_慕课网
为了账号安全,请及时绑定邮箱和手机立即绑定

python进阶

廖雪峰 移动开发工程师
难度中级
时长 3小时33分
  • class Person(object):

        def __init__(self, name, score):
            self.name = name
            self.score = score
            self.get_grade = lambda: 'A'

    p1 = Person('Bob', 90)
    print p1.get_grade#函数
    print p1.get_grade()#方法

    直接把 lambda 函数(虚拟函数)赋值给 self.get_grade 和绑定方法有所不同,函数调用不需要传入 self,但是方法调用需要传入 self


    查看全部
  • 因为方法也是一个属性,所以,它也可以动态地添加到实例上,只是需要用 types.MethodType() 把一个函数变为一个方法。

    p1.get_grade = types.MethodType(fn_get_grade, p1, Person)

    #实例名.实例方法名=types.MethodType(函数名,实例名,类名)

    查看全部
  • 实例的方法就是在类中定义的函数,它的第一个参数永远是 self,指向调用该方法的实例本身,其他参数和一个普通函数是完全一样的.

    查看全部
  • 当实例属性和类属性重名时,实例属性优先级高,它将屏蔽掉对类属性的访问。

    查看全部
  • 实例属性每个实例各自拥有,互相独立,而类属性有且只有一份。

    class Person(object):
        address = 'Earth'#类属性
        def __init__(self, name):
            self.name = name#实例属性

    查看全部
  • setattr()表示你可以通过该方法,给对象添加或者修改指定的属性。

    setattr()方法接受3个参数:setattr(对象,属性,属性的值)

    setattr(self,k,v)相当于self.k = v

    job = 'Students' 应该是自动匹配成了字典(这一点我也不太明白)

    kw.iteritems()这个好像是历遍字典kw的所有key和value,分别匹配的是k,v 


    查看全部
  • 在定义 Person 类时,可以为Person类添加一个特殊的__init__()方法,当创建实例时,__init__()方法被自动调用,我们就能在此为每个实例都统一加上以下属性:

    class Person(object):    
    def __init__(self, name, gender, birth):   #勿忘self参数
            self.name = name
            self.gender = gender
            self.birth = birth

    __init__() 方法的第一个参数必须是 self(也可以用别的名字,但建议使用习惯用法),后续参数则可以自由指定,和定义函数没有任何区别。


    查看全部
  • Python pass是空语句,是为了保持程序结构的完整性。

    pass 不做任何事情,一般用做占位语句。


    查看全部
  • 按照 Python 的编程习惯,类名以大写字母开头,紧接着是(object),表示该类是从哪个类继承下来的。类的继承将在后面的章节讲解,现在我们只需要简单地从object类继承。

    有了Person类的定义,就可以创建出具体的xiaoming、xiaohong等实例。创建实例使用 类名+(),类似函数调用的形式创建:

    xiaoming = Person()
    xiaohong = Person()


    查看全部
  • python 类的定义:

    class <类名>(object) :类名要大写,

    Person()有一个特殊的方法:__init__()方法,它的第一个参数必须是self!(或者用别名也可以,但是必须有,否则运行将会失败!)

    class Person(object):    def __init__(self, name, gender, birth):
            self.name = name
            self.gender = gender
            self.birth = birth

    相应的:

    xiaoming = Person('Xiao Ming', 'Male', '1991-1-1')
    xiaohong = Person('Xiao Hong', 'Female', '1992-2-2')

    class Person(object):

        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)

    还可接受任意关键字参数**kw,生成一个迭代器iteritems(),

    查看全部
  • 要在Python 2.7中引入3.x的除法规则,导入__future__division

    >>> from __future__ import division
    >>> print 10 / 3
    3.3333333333333335

    当新版本的一个特性与旧版本不兼容时,该特性将会在旧版本中添加到__future__中,以便旧的代码能在旧版本中测试新特性。

    查看全部
  • 多重继承的目的是从两种继承树中分别选择并继承出子类,以便组合功能使用。

    查看全部
  • 在一个函数中,如果我们接收一个变量 x,则无论该 x 是 Person、Student还是 Teacher,都可以正确打印出结果,

    这种行为称为多态。也就是说,方法调用将作用在 x 的实际类型上。s 是Student类型,它实际上拥有自己的 whoAmI()方法以及从 Person继承的 whoAmI方法,但调用 s.whoAmI()总是先查找它自身的定义,如果没有定义,则顺着继承链向上查找,直到在某个父类中找到为止。

    由于Python是动态语言,所以,传递给函数 who_am_i(x)的参数 x 不一定是 Person 或 Person 的子类型。任何数据类型的实例都可以,只要它有一个whoAmI()的方法即可.

    动态语言调用实例方法,不检查类型,只要方法存在,参数正确,就可以调用。


    查看全部
    0 采集 收起 来源:python中多态

    2018-12-13

    1. 函数isinstance()可以判断一个变量的类型,既可以用在Python内置的数据类型如str、list、dict,也可以用在我们自定义的类,它们本质上都是数据类型。

    2. 在继承链上,一个父类的实例不能是子类类型,因为子类比父类多了一些属性和方法。在一条继承链上,一个实例可以看成它本身的类型,也可以看成它父类的类型。

    查看全部
  • 一定要用 super(Student, self).__init__(name, gender) 去初始化父类


    self参数已在super()中传入,在__init__()中将隐式传递,不需要写出(也不能写)。

    查看全部

举报

0/150
提交
取消
课程须知
本课程是Python入门的后续课程 1、掌握Python编程的基础知识 2、掌握Python函数的编写 3、对面向对象编程有所了解更佳
老师告诉你能学到什么?
1、什么是函数式编程 2、Python的函数式编程特点 3、Python的模块 4、Python面向对象编程 5、Python强大的定制类
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!