摘要: 定义类方法 和属性类似,方法也分实例方法和类方法。 在class中定义的全部是实例方法,实例方法第一个参数 self 是实例本身。 要在class中定义类方法,需要这么写: class Person(object): count = 0 @classmethod def how_many(cls): 阅读全文
posted @ 2020-02-07 23:16 搞点薯条 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 方法也是属性 我们在 class 中定义的实例方法其实也是属性,它实际上是一个函数对象: class Person(object): def __init__(self, name, score): self.name = name self.score = score def get_grade( 阅读全文
posted @ 2020-02-07 23:06 搞点薯条 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 定义实例方法 一个实例的私有属性就是以__开头的属性,无法被外部访问,那这些属性定义有什么用? 虽然私有属性无法从外部访问,但是,从类的内部是可以访问的。除了可以定义实例的属性外,还可以定义实例的方法。 实例的方法就是在类中定义的函数,它的第一个参数永远是 self,指向调用该方法的实例本身,其他参 阅读全文
posted @ 2020-02-07 22:55 搞点薯条 阅读(402) 评论(0) 推荐(0) 编辑
摘要: 类属性和实例属性名字冲突怎么办 修改类属性会导致所有实例访问到的类属性全部都受影响,但是,如果在实例变量上修改类属性会发生什么问题呢? class Person(object): address = 'Earth' def __init__(self, name): self.name = name 阅读全文
posted @ 2020-02-07 22:47 搞点薯条 阅读(324) 评论(0) 推荐(0) 编辑
摘要: 创建类属性 类是模板,而实例则是根据类创建的对象。 绑定在一个实例上的属性不会影响其他实例,但是,类本身也是一个对象,如果在类上绑定一个属性,则所有实例都可以访问类的属性,并且,所有实例访问的类属性都是同一个!也就是说,实例属性每个实例各自拥有,互相独立,而类属性有且只有一份。 定义类属性可以直接在 阅读全文
posted @ 2020-02-07 22:35 搞点薯条 阅读(909) 评论(0) 推荐(0) 编辑
摘要: 访问限制 我们可以给一个实例绑定很多属性,如果有些属性不希望被外部访问到怎么办? Python对属性权限的控制是通过属性名来实现的,如果一个属性由双下划线开头(__),该属性就无法被外部访问。看例子: class Person(object): def __init__(self, name): s 阅读全文
posted @ 2020-02-07 22:21 搞点薯条 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 初始化实例属性 虽然我们可以自由地给一个实例绑定各种属性,但是,现实世界中,一种类型的实例应该拥有相同名字的属性。例如,Person类应该在创建的时候就拥有 name、gender 和 birth 属性,怎么办? 在定义 Person 类时,可以为Person类添加一个特殊的__init__()方法 阅读全文
posted @ 2020-02-07 22:10 搞点薯条 阅读(384) 评论(0) 推荐(0) 编辑
摘要: 面向对象编程 什么是面向对象编程 面向对象是一种编程范式 把程序看做不同对象的相互调用 对现实世界建立对象模型 面向对象编程的基本细想 类和实例 类用于定义抽象类型 实例根据类的定义被创建出来 class person: pass xiaoming = person() xiaojun = pers 阅读全文
posted @ 2020-02-07 22:04 搞点薯条 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 模块和包的概念 在文件系统中,包就是文件夹,模块就是xxx.py,包可以有多级,包和普通目录的区别就是包下面必须有个__init__.py,每一层都必须有 py文件名即模块名,模块的上一级为包,不同模块允许同名变量函数等,不同包允许同名模块 在一个模块引用其他模块: import math prin 阅读全文
posted @ 2020-02-07 20:24 搞点薯条 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 这两个都是可变参数,可以传入任意个数的参数 *args是非关键字参数,用于tuple,**kw是关键字参数,用于dict 同时使用*args和**kwargs时,必须*args参数列要在**kwargs前 代码 def foo(*args, **kw): print ('args = ', args 阅读全文
posted @ 2020-02-07 17:37 搞点薯条 阅读(252) 评论(0) 推荐(0) 编辑
摘要: 偏函数 当一个函数有很多参数时,调用者就需要提供多个参数。如果减少参数个数,就可以简化调用者的负担。 比如,int()函数可以把字符串转换为整数,当仅传入字符串时,int()函数默认按十进制转换: >>> int('12345') 12345 但int()函数还提供额外的base参数,默认值为10。 阅读全文
posted @ 2020-02-07 17:23 搞点薯条 阅读(177) 评论(0) 推荐(0) 编辑
摘要: decorator装饰器 什么是装饰器 问题: 定义了一个函数 想在运行时动态增加功能 又不想改变函数本身的代码 解决: 利用高阶函数,接收一个函数并对其进行包装,然后返回一个函数 代码 def f1(x): #被装饰函数 return x * x def new_fn(f): #装饰器函数 def 阅读全文
posted @ 2020-02-07 17:09 搞点薯条 阅读(311) 评论(0) 推荐(1) 编辑
摘要: 匿名函数 高阶函数可以接收函数做参数,有些时候,我们不需要显式地定义函数,直接传入匿名函数更方便。 在Python中,对匿名函数提供了有限支持。还是以map()函数为例,计算 f(x)=x2 时,除了定义一个f(x)的函数外,还可以直接传入匿名函数: >>> map(lambda x: x * x, 阅读全文
posted @ 2020-02-07 15:47 搞点薯条 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 闭包 在函数内部定义的函数和外部定义的函数是一样的,只是他们无法被外部访问: def g(): print 'g()...' def f(): print 'f()...' return g 将 g 的定义移入函数 f 内部,防止其他代码调用 g: def f(): print 'f()...' d 阅读全文
posted @ 2020-02-07 15:28 搞点薯条 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 返回函数 Python的函数不但可以返回int、str、list、dict等数据类型,还可以返回函数! 例如,定义一个函数 f(),我们让它返回一个函数 g,可以这样写: def f(): print 'call f()...' # 定义函数g: def g(): print 'call g().. 阅读全文
posted @ 2020-02-07 15:06 搞点薯条 阅读(439) 评论(0) 推荐(0) 编辑
摘要: 自定义排序函数 Python内置的 sorted()函数可对list进行排序: >>>sorted([36, 5, 12, 9, 21]) [5, 9, 12, 21, 36] 但 sorted()也是一个高阶函数,它可以接收一个比较函数来实现自定义排序,比较函数的定义是,传入两个待比较的元素 x, 阅读全文
posted @ 2020-02-07 14:41 搞点薯条 阅读(1151) 评论(1) 推荐(0) 编辑