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

python进阶

廖雪峰 移动开发工程师
难度中级
时长 3小时33分
  • 因为方法也是一个属性,所以,它也可以动态地添加到实例上,只是需要用 types.MethodType() 把一个函数变为一个方法: import types def fn_get_grade(self): if self.score >= 80: return 'A' if self.score >= 60: return 'B' return 'C' class Person(object): def __init__(self, name, score): self.name = name self.score = score p1 = Person('Bob', 90) p1.get_grade = types.MethodType(fn_get_grade, p1, Person) print p1.get_grade() # => A p2 = Person('Alice', 65) print p2.get_grade() # ERROR: AttributeError: 'Person' object has no attribute 'get_grade' # 因为p2实例并没有绑定get_grade 给一个实例动态添加方法并不常见,直接在class中定义要更直观。
    查看全部
  • Person.count的计数增加发生在创建实例之后,因此编码语句要放在对实例属性定义的后面。 但是count作为类属性,定义应该直接在分类后面。
    查看全部
  • __str__()用于显示给用户,而__repr__()用于显示给开发人员。 有一个偷懒的定义__repr__的方法: class Person(object): def __init__(self, name, gender): self.name = name self.gender = gender def __str__(self): return '(Person: %s, %s)' % (self.name, self.gender) __repr__ = __str__
    查看全部
  • 实例的方法就是在类中定义的函数,它的第一个参数永远是 self,指向调用该方法的实例本身,其他参数和一个普通函数是完全一样的 __init__函数在创建实例的时候就会调用 调用实例方法必须在实例上调用: p1 = Person('Bob') print p1.get_name() # self不需要显式传入 # => Bob 如果外部需要访问私有属性,可以通过方法调用获得,这种数据封装的形式除了能保护内部数据一致性外,还可以简化外部调用的难度。
    查看全部
  • 可见,当实例属性和类属性重名时,实例属性优先级高,它将屏蔽掉对类属性的访问。 当我们把 p1 的 address 实例属性删除后,访问 p1.address 就又返回类属性的值 'Earth'了: del p1.address print p1.address # => Earth 可见,千万不要在实例上修改类属性,它实际上并没有修改类属性,而是给实例绑定了一个实例属性。
    查看全部
  • 提供任意额外的关键字参数,并绑定到实例 的方法: def __init__(self, name, gender, **kw): self.name=name self.gender=gender for k,v in kw.iteritems(): setattr(self,k,v)
    查看全部
  • 用 isinstance() 判断它是否是某种类型的实例 用 type() 函数获取变量的类型 用 dir() 函数获取变量的所有属性 filter(__,__) 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。 如果已知一个属性名称,要获取对象的属性,就需要用 getattr() 或者设置对象的属性 setattr( )函数
    查看全部
  • 类本身也是一个对象,如果在类上绑定一个属性,则所有实例都可以访问类的属性,并且,所有实例访问的类属性都是同一个!也就是说,实例属性每个实例各自拥有,互相独立,而类属性有且只有一份。 定义类属性可以直接在 class 中定义: class Person(object): address = 'Earth' def __init__(self, name): self.name = name 因为类属性是直接绑定在类上的,所以,访问类属性不需要创建实例,就可以直接访问: 由于Python是动态语言,类属性也是可以动态添加和修改的,因为类属性只有一份,所有实例访问到的类属性都改变了
    查看全部
  • 如果一个属性由双下划线开头(__),该属性就无法被外部访问。
    查看全部
  • 要定义关键字参数,使用 **kw; 除了可以直接使用self.name = 'xxx'设置一个属性外,还可以通过 setattr(self, 'name', 'xxx') 设置属性。
    查看全部
  • 在定义 Person 类时,可以为Person类添加一个特殊的__init__()方法,当创建实例时,__init__()方法被自动调用,我们就能在此为每个实例都统一加上以下属性: class Person(object): def __init__(self, name, gender, birth): self.name = name self.gender = gender self.birth = birth __init__() 方法的第一个参数必须是 self(也可以用别的名字,但建议使用习惯用法),后续参数则可以自由指定,和定义函数没有任何区别 要特别注意的是,初学者定义__init__()方法常常忘记了 self 参数:
    查看全部
  • 1.按照 Python 的编程习惯,类名以大写字母开头,紧接着是(object),表示该类是从哪个类继承下来的。 class Person(object): pass 2.按照 Python 的编程习惯,类名以大写字母开头,紧接着是(object),表示该类是从哪个类继承下来的。 xiaoming = Person()
    查看全部
  • 111定义格式
    查看全部
  • Python的网络服务器有TCPServer、UDPServer、UnixStreamServer、UnixDatagramServer,而服务器运行模式有 多进程ForkingMixin 和 多线程ThreadingMixin两种。 要创建多进程模式的 TCPServer: class MyTCPServer(TCPServer, ForkingMixin) pass
    查看全部
  • reduce()函数也是Python内置的一个高阶函数。reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值 reduce()还可以接收第3个可选参数,作为计算的初始值。如果把初始值设为100,计算: reduce(f, [1, 3, 5, 7, 9], 100)
    查看全部

举报

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

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