谈谈 Python 类
2015-06-02 22:29
1006 查看
刚学 Python 不久,写下自己的认识,当做学习笔记吧,有什么不对的地方欢迎拍砖…
python 类的定义语法如上,简单吧.但是 Python 类有区别 C++ 等语言特殊的地方,这里我们主要来谈谈这些特殊的地方
log = {‘0’:’log0’}
python 类的定义语法如上,简单吧.但是 Python 类有区别 C++ 等语言特殊的地方,这里我们主要来谈谈这些特殊的地方
这两个属性就是类属性,就像是 C++ 中的静态成员变量.
那么怎么定义实例属性呢? python 的属性可以是动态的,对没错是动态的,对与玩 C++ 的我看到这点我快惊呆了,还可以这么玩…
认真分析这段代码,当实例化实例 ia 时,ia 的 version 属性就是类的属性,所以更改了类的属性值后, 实例 ia 的值也跟这改变了
当对实例 ia 赋值后,实例 ia 也有了 version 属性,此同名属性会隐藏掉类的 version 属性,这里其实有两个 version 属性,所以当改变类 clsA.version 的值后 ia.version 没有改变.
删除实例属性后,实例有将使用类的属性.
接下来我们在看一个可变类型的属性,其实是一样的,但是要注意理解可变类型的特性
关键的地方我都注释了,天才的你肯定可以看懂,我就不多啰嗦了^_^…
直接调用抛出异常,实例化后调用就正常了,那么有没有静态方法呢,有的
这里使了函数修饰,不懂什么是函数修饰打童鞋可以去搜搜 python 函数修饰.
ps: 这个特性也是个很有意思打特性,以前哇只热衷与 C/C++, 没想到这些动态语言这么有意思,哈哈,学海无涯啊…有种闹东大开打感觉…
好啦,就总结这些,当笔记,例外打个广告: 我在边学 python 的时候边用 Django 搭建啦一个个人主页 http://aquariushome.duapp.com/ 欢迎拍砖吐槽哈….
类定义
class clsA(object): '''this is doc''' version = 0.1刚学 Python 不久,写下自己的认识,当做学习笔记吧,有什么不对的地方欢迎拍砖...
类定义
class clsA(object): '''this is doc''' version = 0.1 log = {'0':'log0'} def __init__(self): pass def fun(self): pass
python 类的定义语法如上,简单吧.但是 Python 类有区别 C++ 等语言特殊的地方,这里我们主要来谈谈这些特殊的地方
doc 注释
在类定义的紧接下一行的三引号中的注释是类的 doc, 调用内建函数 help() 时可以看到这些注释信息,这是 python 的标准log = {‘0’:’log0’}
def __init__(self): pass def fun(self): pass
python 类的定义语法如上,简单吧.但是 Python 类有区别 C++ 等语言特殊的地方,这里我们主要来谈谈这些特殊的地方
doc 注释
在类定义的紧接下一行的三引号中的注释是类的 doc, 调用内建函数 help() 时可以看到这些注释信息,这是 python 的标准注释方法__init__(self)方法
int(self) 方法不是构造函数,他只是类实例化后 第一个 自动执行 ,的方法,这个方法也可带上参数来完成必要的出事化类属性和实例属性
python 类中定义的属性是类的属性version = 0.1 log = {'0':'log0'}
这两个属性就是类属性,就像是 C++ 中的静态成员变量.
>>>clsA.version 0.1 >>>clsA.version = 0.2 >>>clsA.version 0.2
那么怎么定义实例属性呢? python 的属性可以是动态的,对没错是动态的,对与玩 C++ 的我看到这点我快惊呆了,还可以这么玩…
>>>ia = clsA() >>>ia.version 0.2 >>>clsA.version = 0.3 >>>ia.version 0.3 # 注意这里值变了 >>>ia.version = 0.4 >>>clsA.version 0.3 # 注意这里还是 0.3 >>>ia.version 0.4
认真分析这段代码,当实例化实例 ia 时,ia 的 version 属性就是类的属性,所以更改了类的属性值后, 实例 ia 的值也跟这改变了
当对实例 ia 赋值后,实例 ia 也有了 version 属性,此同名属性会隐藏掉类的 version 属性,这里其实有两个 version 属性,所以当改变类 clsA.version 的值后 ia.version 没有改变.
>>>del ia.version >>>ia.version 0.3
删除实例属性后,实例有将使用类的属性.
接下来我们在看一个可变类型的属性,其实是一样的,但是要注意理解可变类型的特性
>>>ib = clsA() >>>ib.log {'0':'log0'} >>>ib.log['1':'log1'] # 并没有创建实例属性,只是引用了类属性 >>>ib.log {'0':'log0', '1':'log1' } >>>clsA.log {'0':'log0', '1':'log1' } # 所以类属性被修改 >>> >>>ib.log = {} # 这样就创建了实例属性,类属性被隐蔽了 >>>ib.log {} >>>clsA.log {'0':'log0', '1':'log1' }
关键的地方我都注释了,天才的你肯定可以看懂,我就不多啰嗦了^_^…
类的方法
类的方法必须是在实例中调用,用 python 术语是叫 绑定,>>>clsA.fun() Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unbound method fun() must be called with clsA instance as first argument (got nothing instead) >>> >>>ia.fun() >>>
直接调用抛出异常,实例化后调用就正常了,那么有没有静态方法呢,有的
静态方法和类方法
class TestStaticMethod(object): @staticmethod def foo(): print 'calling static method foo()' class TestClassMethod(object): @classmethod def foo(cls): # 传入类 print 'calling static method foo()' >>>tsm = TestStaticMethod() >>>tsm.foo() 'calling static method foo()' >>>TestStaticMethod.foo() 'calling static method foo()' >>> >>>tcm = TestClassMethod() >>>tcm.foo() 'calling static method foo()' >>>TestClassMethod.foo() 'calling static method foo()'
这里使了函数修饰,不懂什么是函数修饰打童鞋可以去搜搜 python 函数修饰.
ps: 这个特性也是个很有意思打特性,以前哇只热衷与 C/C++, 没想到这些动态语言这么有意思,哈哈,学海无涯啊…有种闹东大开打感觉…
好啦,就总结这些,当笔记,例外打个广告: 我在边学 python 的时候边用 Django 搭建啦一个个人主页 http://aquariushome.duapp.com/ 欢迎拍砖吐槽哈….
相关文章推荐
- 关于Python的super用法研究
- 【转】python处理csv数据
- Python Flask UnicodeDecodeError 编码错误解决
- Python语言十分钟快速入门
- 老鸟的Python入门教程
- python的模块导入机制和模块安装方法
- Python的functools模块
- Python 代码风格学习一
- python读写文件
- python基础教程学习笔记---(7)python操作mysql
- python lambda表达式
- python sort and sorted
- 在IDL中调用自定义Python Module
- python之测试
- python第三方库推荐之tablib(用于导出数据到不同的文件格式)
- python copy & deepcopy 区别
- python socket编程小解
- python推荐第三方库之sandglass(用于时间处理)
- python中的内建函数(BIF)
- Python入门图