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

python进阶

廖雪峰 移动开发工程师
难度中级
时长 3小时33分
  • 只要有方法,且对应参数正确,就可以调用。 动态语言和静态语言(例如Java)最大的差别之一。动态语言调用实例方法,不检查类型,只要方法存在,参数正确,就可以调用。<br> 本质在这里 由于Python是动态语言,所以,传递给函数 who_am_i(x)的参数 x 不一定是 Person 或 Person 的子类型。任何数据类型的实例都可以,只要它有一个whoAmI()的方法即可,这就产生了多态 动态语言和静态语言(例如Java)最大的差别之一。动态语言调用实例方法,不检查类型,只要方法存在,参数正确,就可以调用。 本质在这里 由于Python是动态语言,所以,传递给函数 who_am_i(x)的参数 x 不一定是 Person 或 Person 的子类型。任何数据类型的实例都可以,只要它有一个whoAmI()的方法即可,这就产生了多态
    查看全部
    0 采集 收起 来源:python中多态

    2018-03-22

  • class Person(object): def __init__(self, name, score): self.name = name self.score = score def get_grade(self): return 'A' p1 = Person('Bob', 90) print p1.get_grade # => <bound method Person.get_grade of <__main__.Person object at 0x109e58510>> print p1.get_grade() # => A 也就是说,p1.get_grade 返回的是一个函数对象,但这个函数是一个绑定到实例的函数,p1.get_grade() 才是方法调用。 因为方法也是一个属性,所以,它也可以动态地添加到实例上,只是需要用 types.MethodType() 把一个函数变为一个方法: p1.get_grade = types.MethodType(fn_get_grade, p1, Person)
    查看全部
  • 当实例属性和类属性重名时,实例属性优先级高,
    查看全部
  • class Person(object): address = 'Earth' def __init__(self, name): self.name = name p1 = Person('Bob') p2 = Person('Alice') print 'Person.address = ' + Person.address p1.address = 'China' print 'p1.address = ' + p1.address print 'Person.address = ' + Person.address print 'p2.address = ' + p2.address 原因是 p1.address = 'China'并没有改变 Person 的 address,而是给 p1这个实例绑定了实例属性address ,对p1来说,它有一个实例属性address(值是'China'),而它所属的类Person也有一个类属性address,所以:
    查看全部
  • 注意t 是Teacher的实例,继承链是: object <- Person <- Teacher
    查看全部
  • 包下面必须有__init__.py
    查看全部
  • @classmethod装饰器的作用是创建类方法.好处是可以直接通过访问类得到结果,而不需要通过实例。
    查看全部
  • 返回函数不要引用任何循环变量,或者后续会发生变化的变量
    查看全部
    0 采集 收起 来源:python中闭包

    2016-09-22

  • 实例的方法就是在类中定义的函数,它的第一个参数永远是 self,指向调用该方法的实例本身,其他参数和一个普通函数是完全一样的
    查看全部
  • lambda: 'A'等价于return'A',相当于一个函数f,那么f()='A'.因此,p1.get_grade=f,p1.get_grade()=f() 就是这个意思,但没有说全 p1.get_grade是属性,只不过这里的属性是一个函数对象,即f p1.get_grade()是方法,前面的p1就是调用这个方法的对象,即实例,整句来说就是实例方法
    查看全部
  • 不直接使用sorted():因为列表L1中是实例名,我们比较的是实例中的属性name,所以重新定义cmp方法 使用L2=soreted(L1,lambda x,y:cmp(x.name,y.name)):两两比较实例的属性
    查看全部
  • 类名(object): 类型以大写字母开头 object是python所有类的基类(元类) pass:是do nothing 用以保证语义与结构的完整 结果: <__main__.Person object at 0x00000000022B8C18> <__main__.Person object at 0x00000000022B8C50> False 出现__main__:是调用模块本身
    查看全部
  • def format_name(s): return s.capitalize() print map(format_name,['adam','LISA','barT'])
    查看全部
  • 如果return缩进,会影响结果
    查看全部
  • sorted()函数 return -1 在前面
    查看全部

举报

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

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