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

python进阶

廖雪峰 移动开发工程师
难度中级
时长 3小时33分
  • print filter(lambda x: x[0]!='_', dir(p)) ->>从实例p的所有属性中筛选出不是'_xxx'这类特殊属性的属性
    查看全部
  • reduce()函数也是Python内置的一个高阶函数。reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。
    查看全部
  • p=Person(...) dir(p)时显示Person类属性和自己定义的属性如name,gender等 dir(Person)时则不显示自己定义的属性。为什么? 答:Person是类对象,p是实例对象;python是动态语言,变量是临时创建的,你赋值的时候才会有
    查看全部
  • python中获取对象信息的方法: (1) isinstance() 判断它是否是某种类型的实例 (2)用 type() 函数获取变量的类型,它返回一个 Type 对象: >>> type(123) <type 'int'> >>> s = Student('Bob', 'Male', 88) >>> type(s) <class '__main__.Student'> (3) dir() 函数获取变量的所有属性: (4)filter()函数,去掉`__xxx__`这类的特殊属性,只保留我们自己定义的属性 (5)如果已知一个属性名称,要获取或者设置对象的属性,就需要用 getattr() 和 setattr( )函数了: >>> getattr(s, 'name') # 获取name属性 >>> setattr(s, 'name', 'Adam') # 设置新的name属性 >>> getattr(s, 'age') # 获取age属性,但是属性不存在,报错 >>> getattr(s, 'age', 20) # 获取age属性,如果属性不存在,就返回默认值20 >>>setattr()表示你可以通过该方法,给对象添加或者修改指定的属性。 setattr()方法接受3个参数:setattr(对象,属性,属性的值) setattr(self,k,v)相当于self.k = v **任务 对于Person类的定义: class Person(object): def __init__(self, name, gender): self.name = name self.gender = gender 希望除了 name和gender 外,可以提供任意额外的关键字参数,并绑定到实例,请修改 Person 的 __init__()定 义,完成该功能. 代码如下:
    查看全部
  • def f(x): return x*x print map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9]) 变量x指的是list里的元素,因此不需要再次遍历list
    查看全部
  • python中多重继承 **代码: class A(object): ........... class B(A): ............. class C(A): ............... class D(B, C): ............. D 同时继承自 B 和 C,也就是 D 拥有了 A、B、C 的全部功能。多重继承通过 super()调用__init__()方法时,A 虽然被继承了两次,但__init__()只调用一次: **多重继承的目的是从两种继承树中分别选择并继承出子类,以便组合功能使用。
    查看全部
  • python中多态 **s 是Student类型,它实际上拥有自己的 whoAmI()方法以及从 Person继承的 whoAmI方法,但调用 s.whoAmI()总是先查找它自身的定义,如果没有定义,则顺着继承链向上查找,直到在某个父类中找到为止。 **代码: def who_am_i(x): print x.whoAmI() 传递给函数 who_am_i(x)的参数 x 不一定是 Person 或 Person 的子类型。任何数据类型的实例都可以,只要它有一个whoAmI()的方法即可。 ->>这是动态语言和静态语言(例如Java)最大的差别之一。动态语言调用实例方法,不检查类型,只要方法存在,参数正确,就可以调用。
    查看全部
    0 采集 收起 来源:python中多态

    2018-03-22

  • python中判断类型isinstance(x,y), isinstance()可以判断一个变量的类型,既可以用在Python内置的数据类型如str、list、dict,也可以用在我们自定义的类,它们本质上都是数据类型 >>> isinstance(p, Person) True # p是Person类型
    查看全部
  • super(Student, self).__init__(name, gender) 去初始化父类 函数super(Student, self)将返回当前类继承的父类,即 Person ,然后调用__init__()方法,注意self参数已在super()中传入,在__init__()中将隐式传递,不需要写出(也不能写)。
    查看全部
  • 把类属性count改为私有__count,这样实例变量在外部无法修改__count,而且只能在类的内部用‘类名+.’调用,在类的外面不可以调用
    查看全部
  • **types.MethodType() 把一个函数变为一个方法 import types def fn_get_grade(self): ........... 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(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() **结果: <function <lambda> at 0x7ff9282475f0> A **分析 (1)p1.get_grade 为什么是函数而不是方法? 答:直接把 lambda 函数赋值给 self.get_grade 和绑定方法有所不同,函数调用不需要传入 self,但是方法调用需要传入 self。 代码: 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 分析:(1)p1.get_grade 返回的是一个函数对象,但这个函数是一个绑定到实例的函数,p1.get_grade() 才是方法调用。
    查看全部
  • **实例的方法就是在类中定义的函数,它的第一个参数永远是 self,指向调用该方法的实例本身,其他参数和一个普通函数是完全一样的 **实例方法内部,可以访问所有实例属性,这样,如果外部需要访问私有属性,可以通过方法调用获得,这种数据封装的形式除了能保护内部数据一致性外,还可以简化外部调用的难度。 **任务** 请给 Person 类增加一个私有属性 __score,表示分数,再增加一个实例方法 get_grade(),能根据 __score 的值分别返回 A-优秀, B-及格, C-不及格三档。 代码如下图所示:(# coding=utf-8)
    查看全部
  • **修改类属性会导致所有实例访问到的类属性全部都受影响,但是,如果在实例变量上修改类属性其实只是“实例绑定了实例属性address ,类属性不会都受影响” **当实例属性和类属性重名时,实例属性优先级高 **把 Person 类属性 count 改为 __count,___count只能在类的内部调用“类名+‘.’(即Person.__count)”,在类的外部不管是‘类名’还是‘实例’都不能调用 代码如下图所示: 结果: 1 2 attributeerror
    查看全部
  • def is_not_empty(s): return s and len(s.strip()) > 0 思维的严谨:None 没有strip函数。(当s是空的时候,就不会有什么问题了) 此外。 声明:s为字符串,rm为要删除的字符序列 s.strip(rm) 删除s字符串中开头、结尾处,位于 rm删除序列的字符 s.lstrip(rm) 删除s字符串中开头处,位于 rm删除序列的字符 s.rstrip(rm) 删除s字符串中结尾处,位于 rm删除序列的字符 注意: 1. 当rm为空时,默认删除空白符(包括'\n', '\r', '\t', ' ') 2.这里的rm删除序列是只要边(开头或结尾)上的字符在删除序列内,就删除掉。 例如 : 复制代码 代码如下: >>> a = '123abc' >>> a.strip('21') '3abc' 结果是一样的 >>> a.strip('12') '3abc'
    查看全部

举报

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

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