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

python进阶

廖雪峰 移动开发工程师
难度中级
时长 3小时33分
  • 对 int、str 等内置数据类型排序时,Python的 sorted() 按照默认的比较函数 cmp 排序,但是,如果对一组 Student 类的实例排序时,就必须提供我们自己的特殊方法 __cmp__() #修改 Student 的 __cmp__ 方法,让它按照分数从高到底排序,分数相同的按名字排序。 def __cmp__(self, s): if False == isinstance(s, Student): return -1 return -cmp(self.score,s.score) or cmp(self.name,s.name)
    查看全部
    0 采集 收起 来源:python中 __cmp__

    2016-05-11

  • Python 默认定义了__str__()和__repr__()两种方法,__str__()用于显示给用户,而__repr__()用于显示给开发人员。可以通过重写__str__来实现自定义。 可以使__repr__和__repr__返回相同的内容:__repr__ = __str__
    查看全部
  • 除了用 isinstance() 判断它是否是某种类型的实例外,还可以用 type() 函数获取变量的类型,它返回一个 Type 对象。也可以用 dir() 函数获取变量的所有属性。 对于实例变量,dir()返回所有实例属性,包括`__class__`这类有特殊意义的属性。注意到方法`whoAmI`也是 s 的一个属性。可以利用filter()函数来去掉'__XXX__'这类属性,从而只获取自己定义的属性。 dir()返回的属性是字符串列表,如果已知一个属性名称,要获取或者设置对象的属性,就需要用 getattr() 和 setattr( )函数了。 setattr(s, 'name', 'Adam') # 设置新的name属性 getattr(s, 'age', 20) # 获取age属性,如果属性不存在,就返回默认值20:
    查看全部
  • 多重继承,B、C继承A,D 同时继承自 B 和 C,也就是 D 拥有了 A、B、C 的全部功能。多重继承通过 super()调用__init__()方法时,A 虽然被继承了两次,但__init__()只调用一次。 多重继承的目的是从两种继承树中分别选择并继承出子类,以便组合功能使用。
    查看全部
  • 动态语言和静态语言(例如Java)最大的差别之一是动态语言调用实例方法,不检查类型,只要方法存在,参数正确,就可以调用。 Python提供了open()函数来打开一个磁盘文件,并返回 File 对象。File对象有一个read()方法可以读取文件内容。 例如,从文件读取内容并解析为JSON结果: import json f = open('/path/to/file.json', 'r') print json.load(f) 由于Python的动态特性,json.load()并不一定要从一个File对象读取内容。任何对象,只要有read()方法,就称为File-like Object,都可以传给json.load()。
    查看全部
    0 采集 收起 来源:python中多态

    2016-05-11

  • 函数isinstance(p,Person)可以判断一个变量的类型,既可以用在Python内置的数据类型如str、list、dict,也可以用在我们自定义的类,它们本质上都是数据类型。 在一条继承链上,一个实例可以看成它本身的类型,也可以看成它父类的类型。
    查看全部
  • 如果已经定义了Person类,需要定义新的Student和Teacher类时,可以直接从Person类继承: class Person(object): def __init__(self, name, gender): self.name = name self.gender = gender 定义Student类时,只需要把额外的属性加上,例如score: class Student(Person): def __init__(self, name, gender, score): super(Student, self).__init__(name, gender) self.score = score 一定要用 super(Student, self).__init__(name, gender) 去初始化父类,否则,继承自 Person 的 Student 将没有 name 和 gender。 函数super(Student, self)将返回当前类继承的父类,即 Person ,然后调用__init__()方法,注意self参数已在super()中传入,在__init__()中将隐式传递,不需要写出(也不能写)。
    查看全部
  • 通过标记一个 @classmethod,该方法将绑定到 Person 类上,而非类的实例。类方法的第一个参数将传入类本身,通常将参数名命名为 cls,上面的 cls.count 实际上相当于 Person.count。 因为是在类上调用,而非实例上调用,因此类方法无法获得任何实例变量,只能获得类的引用。
    查看全部
  • 我们在 class 中定义的实例方法其实也是属性,它实际上是一个函数对象。 p1.get_grade 返回的是一个函数对象,但这个函数是一个绑定到实例的函数,p1.get_grade() 才是方法调用。 因为方法也是一个属性,所以,它也可以动态地添加到实例上,只是需要用 types.MethodType() 把一个函数变为一个方法。 import types p1.get_grade = types.MethodType(fn_get_grade, p1, Person) 给一个实例动态添加方法并不常见,直接在class中定义要更直观。 self.get_grade = lambda: 'A' 这里直接把 lambda 函数赋值给 self.get_grade 和绑定方法有所不同,函数调用不需要传入 self,但是方法调用需要传入 self。
    查看全部
  • 当实例属性和类属性重名时,实例属性优先级高,它将屏蔽掉对类属性的访问。 可见,千万不要在实例上修改类属性,它实际上并没有修改类属性,而是给实例绑定了一个实例属性 print Person.__count打印不出来,提示attributeerror,没有__count这个变量,因为__count是内部的访问限制函数,无法通过外部打印访问。 因此只能通过类内部来访问打印
    查看全部
  • 当实例属性和类属性重名时,实例属性优先级高,它将屏蔽掉对类属性的访问。 千万不要在实例上修改类属性,它实际上并没有修改类属性,而是给实例绑定了一个实例属性。 删除属性:del p1.address
    查看全部
  • 实例属性每个实例各自拥有,互相独立,而类属性有且只有一份。 因为类属性是直接绑定在类上的,所以,访问类属性不需要创建实例,就可以直接访问。 由于Python是动态语言,类属性也是可以动态添加和修改的。
    查看全部
  • Person.count = Person.count + 1 要注意等号前后参数的一致性,后面要加上操作符.和类名Person
    查看全部
  • Python对属性权限的控制是通过属性名来实现的,如果一个属性由双下划线开头(__),该属性就无法被外部访问。 但是,如果一个属性以"__xxx__"的形式定义,那它又可以被外部访问了,以"__xxx__"定义的属性在Python的类中被称为特殊属性,有很多预定义的特殊属性可以使用,通常我们不要把普通属性用"__xxx__"定义。 以单下划线开头的属性"_xxx"虽然也可以被外部访问,但是,按照习惯,他们不应该被外部访问。
    查看全部
  • 定义 Person 类时,可以为Person类添加一个特殊的__init__()方法,当创建实例时,__init__()方法被自动调用,我们就能在此为每个实例都统一加上以下属性。 __init__() 方法的第一个参数必须是 self(也可以用别的名字,但建议使用习惯用法),后续参数则可以自由指定,和定义函数没有任何区别。 __init__()函数除了指定的参数外,还可以使用**kw来定义任意的关键字参数; 除了可以直接使用self.name = 'xxx'设置一个属性外,还可以通过 setattr(self, 'name', 'xxx') 设置属性。 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)
    查看全部

举报

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

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