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

python进阶

廖雪峰 移动开发工程师
难度中级
时长 3小时33分
  • 看下图:

    54daf037000142d207580552.jpg

    像这样,同时继承自 BC,也就是 D 拥有了 A、B、C 的全部功能。多重继承通过 super()调用__init__()方法时,A 虽然被继承了两次,但__init__()只调用一次


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

    子类是父类,父类不是子类

    查看全部
  • 类的继承

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

    class Teacher(Person):

        def __init__(self, name, gender, course):
            super (Teacher,self).__init__(name,gender)
            self.course = course

    t = Teacher('Alice', 'Female', 'English')
    print t.name
    print t.course

    一定要用 super(Teacher, self).__init__(name, gender) 去初始化父类,否则,继承自 Person 的 Teacher 将没有 name 和 gender。

    函数super(Student, self)将返回当前类继承的父类,即 Person ,然后调用__init__()方法,注意self参数已在super()中传入,在__init__()中将隐式传递,不需要写出(也不能写)


    查看全部
  • class中定义的全部是实例方法,实例方法第一个参数 self 是实例本身。

    要在class中定义类方法,需要这么写:

    class Person(object):
        count = 0    @classmethod
        def how_many(cls):
            return cls.count
        def __init__(self, name):
            self.name = name
            Person.count = Person.count + 1
    
    print Person.how_many()
    p1 = Person('Bob')
    print Person.how_many()

    通过标记一个 @classmethod,该方法将绑定到 Person 类上,而非类的实例。类方法的第一个参数将传入类本身,通常将参数名命名为 cls,上面的 cls.count 实际上相当于 Person.count

    因为是在类上调用,而非实例上调用,因此类方法无法获得任何实例变量,只能获得类的引用。


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

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

    不能再实例上修改类属性,它实际上是给实例绑定了一个实例属性

    查看全部
  • 绑定在一个实例上的属性不会影响其他实例,但是,类本身也是一个对象,如果在类上绑定一个属性,则所有实例都可以访问类的属性,并且,所有实例访问的类属性都是同一个!也就是说,实例属性每个实例各自拥有,互相独立,而类属性有且只有一份。

    定义类属性可以直接在 class 中定义:

    class Person(object):    address = 'Earth'
        def __init__(self, name):
            self.name = name


    查看全部
  • 双下划线开头的属性如:"__job"不能直接被外部访问。

    但是,如果一个属性以"__xxx__"的形式定义,那它又可以被外部访问了,以"__xxx__"定义的属性在Python的类中被称为特殊属性,有很多预定义的特殊属性可以使用,通常我们不要把普通属性用"__xxx__"定义。

    单下划线开头的属性"_xxx"虽然也可以被外部访问,但是,按照习惯,他们不应该被外部访问。


    查看全部
  • 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)

    xiaoming = Person('Xiao Ming', 'Male', '1990-1-1', job='Student')

    print xiaoming.name
    print xiaoming.job


    查看全部
  • Python的新版本会引入新的功能,但是,实际上这些功能在上一个老版本中就已经存在了。要“试用”某一新的特性,就可以通过导入__future__模块的某些功能来实现。

    查看全部
  • functools.partial就是帮助我们创建一个偏函数的,不需要我们自己定义int2(),可以直接使用下面的代码创建一个新的函数int2:

    >>> import functools
    >>> int2 = functools.partial(int, base=2)
    >>> int2('1000000')
    64
    >>> int2('1010101')
    85


    查看全部
    0 采集 收起 来源:python中偏函数

    2018-04-17

  • JSON(JavaScript Object Notation):一种轻量级数据交换格式,相对于XML而言更简单,也易于阅读和编写,机器也方便解析和生成,Json是Python的Json模块序列化与反序列化的过程分别是 encoding和 decoding

    encoding:把一个Python对象编码转换成Json字符串
    decoding:把Json格式字符串解码转换成Python对象
    对于简单数据类型(string、unicode、int、float、list、tuple、dict),可以直接处理。

    json.dumps方法对简单数据类型encoding:

    查看全部
  • 定义带参数的装饰器

    import time

    def performance(unit):
        def performance_decorate(f):
            def fn(*args, **kw):
                t1 = time.time()
                r = f(*args, **kw)
                t2 = time.time()
                print 'Call %s() in %fs %s' % (f.__name__,(t2 - t1),unit)
                return r
            return fn
        return performance_decorate
       

    @performance('ms')
    def factorial(n):
        return reduce(lambda x,y: x*y, range(1, n+1))

    print factorial(10)


    查看全部
  • 该装饰器能够打印函数调用时间,且可以保证任意个数的参数都能够正常调用

    import time

    def performance(f):
        def fn(*args,**kw):
            t1 = time.time()
            r = f(*args,**kw)
            t2 = time.time()
            print 'Call %s() in %fs' % (f.__name__,(t2 - t1))
            return r
        return fn

    @performance
    def factorial(n):
        return reduce(lambda x,y: x*y, range(1, n+1))

    print factorial(10)


    查看全部
  • 在Python中,对匿名函数提供了有限支持。还是以map()函数为例,计算 f(x)=x时,除了定义一个f(x)的函数外,还可以直接传入匿名函数:

    >>> map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9])
    [1, 4, 9, 16, 25, 36, 49, 64, 81]

    关键字lambda 表示匿名函数,冒号前面的 x 表示函数参数。

    匿名函数有个限制,就是只能有一个表达式,不写return,返回值就是该表达式的结果


    查看全部

举报

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

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