13. Python脚本学习笔记十三类与对象
来源:互联网 发布:vue js 折叠面板例子 编辑:程序博客网 时间:2024/06/05 04:29
13. Python脚本学习笔记十三类与对象
本篇名言:“人生如梦,岁月无情.蓦然回首,才发现人活着是一种心情,穷也好,富也好,得也好,失也好.一切都是过眼云烟,只要心情好,一切都好!”
由于Python被称做面向对象的语言,所以对象什么的就是Python核心概念了。
关于对象的具体,蛤蟆不再此处详述了。
1. 创建类
如下所示:
class Person:
def setName(self,name):
self.name=name
def getName(self,name):
return self.name
def greet(self):
print "Hello,world! I'm %s." %self.name
foo=Person()
bar=Person()
foo.setName('Luke Sky')
bar.setName('Anak')
foo.greet()
bar.greet()
输出如下:
Hello,world!I'm Luke Sky.
Hello,world!I'm Anak.
类把自己作为第一个参数传入函数中,命名为self。
2. 特性、函数和方法
class Class:
def method(self):
print 'I have a self!'
def function():
print "I don't..."
instance=Class()
instance.method()
instance.method=function
instance.method()
输出如下所示:
I havea self!
Idon't ...
通过实例调用方法,将实例中的方法给替换掉又继续调用。
为了让方法或者特性变成私有,从外部无法访问,只要在它名字前面加上双下划线即可。
>>> class Secretive:
... def __inaccesible(self):
... print "bet you can not see me..."
... def accessiablez(self):
... print "The secret message is :"
... self.__inaccesible()
...
>>> s=Secretive()
>>> s.__inaccesible()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Secretive instance has noattribute '__inaccesible'
>>> s.accessiablez()
The secret message is :
bet you can not see me...
看,直接访问__开头的方法是会报错的。
不够调用如下还是能访问的其实:
>>> s._Secretive__inaccesible()
bet you can not see me...
是不是很诡异?
只是编译的时候被翻译成加上单下划线和类名的形式而已。
3. 类的命名空间
来看两个函数:
def foo(x): return x*x
foo=lambda x: x*x
功能基本一样,都将变量foo绑定到函数了。
定义类时,同样事情也会发生。
如下,在类作用域内定义了一个可供所有成员访问的变量。发现2个实例m1,m2其实是共享了类作用域内的变量。
class MemberCounter:
member=0
def init(self):
MemberCounter.member+=1
m1=MemberCounter()
m1.init()
print m1.member
m2=MemberCounter()
m2.init()
print m2.member
做重新绑定后,就屏蔽盖问题了如下:
m1.member='wo'
print m1.member
print m2.member
输出如下:
wo
2
4. 指定超类
子类可以扩展超类的定义。将其他类名写在class语句后的圆括号内可以指定超类。
就是理解成子类。继承父类的方法和变量。
如下示例:
classFilter:
definit(self):
self.blocked=[]
deffilter(self,sequence):
return [xfor xin sequenceif xnotinself.blocked ]
classSPAMFilter(Filter):
definit(self):
self.blocked=['SPAM']
f=Filter()
f.init()
printf.filter([1,2,3])
s=SPAMFilter()
s.init()
print s.filter(['SPAM','ok','error','SPAM'])
输出 如下:
[1, 2,3]
['ok', 'error']
5. 调查继承
查看一个类是否是另一个类的子类,通过内建issubclass函数来实现。
执行如下:
print issubclass(SPAMFilter,Filter)
print issubclass(Filter, SPAMFilter)
输出如下:
True
False
可以使用类的特殊特性__bases__,instance方法检查基类与是否是类的实例
print SPAMFilter.__bases__
print isinstance(s,SPAMFilter)
输出如下:
(<class__main__.Filter at 0x01DF7CE0>,)
True
查找对象属于哪个类,可以使用__class__特性
6. 多个超类
这个就是多重继承。非常有用。不过如果不是很熟练,就不要使用,会出现不可预测的问题。
- 13. Python脚本学习笔记十三类与对象
- 23. Python脚本学习笔记二十三网络编程
- python 学习笔记 -- 类与对象
- 类与对象学习笔记(Python)
- python学习笔记(十三) - easy_install安装与使用
- python 学习笔记(十三)
- Python学习笔记(十三)
- Python学习笔记(13)-Python类与对象示例
- JavaScript 学习笔记十三 面向对象?
- JavaScript学习笔记二十三:浏览器对象
- python学习-07-浅谈对象与类(笔记)
- python 系统学习笔记(十三)---lambda
- Python学习笔记(十三):模块基础
- python 系统学习笔记(十三)---lambda
- python 学习笔记(二十三)
- python cookbook学习笔记十三:Struct模块
- python 学习(十三)之列表脚本操作符
- python学习笔记7:对象引用与对象
- 11. Python脚本学习笔记十一函数与参数
- eclipse--开启代码自动提示
- Java集合框架初步(hashset treeset list hashmap)
- 12. Python脚本学习笔记十二作用域与递归
- 在win7下装centos7双系统,恢复双方引导的艰难历程,希望给和我遇到同样困难的人一些帮助
- 13. Python脚本学习笔记十三类与对象
- 14. Python脚本学习笔记十四异常
- wait,notify,synchronized实现阻塞队列
- 虹膜识别与虹膜定位(续)算法实现
- 15. Python脚本学习笔记十五特殊方法、属性和迭代器
- 通过itchat进行给好友发送消息
- 数据结构实验之二叉树八:(中序后序)求二叉树的深度
- 16. Python脚本学习笔记十六生成器
- redis之NoSQL入门和概述及应用