参考:

https://www.cnblogs.com/studyDetail/p/6446180.html (python的类)

https://www.cnblogs.com/zunchang/p/7965685.html (面向过程和面向对象编程,推荐)

http://xukaizijian.blog.163.com/blog/static/170433119201111894228877/ (python类的内置方法)

类的定义有点像以下的格式:

class ClassName([BaseClass]):

ClassAttribute=xx

def Method(self[,arg1,arg2...]):

self.instanceAttribute=xx

...

...

class是关键字

ClassName:表示定义的类的名字

BaseClass:这个是指要继承的基类的名字,如果为空,则默认继承object类

ClassAttribute:定义在类的作用域则代表类的自有属性

def Method(self[,arg1,arg2...]):这个是类里面的方法,只有类里面的方法才能对实例出来的数据进行操作

self.instanceAttribute:实例属性,每个实例的值不一样,这是因为self关键字的缘故

例子1:(self字段的作用)

In [8]: class c1():

...: info='from class'

...: def __init__(self,myname):

...: self.name=myname

...: def printName(self):

...: print self.name

...:

In [9]: i1=c1('tom')

In [10]: i1.name

Out[10]: 'tom'

In [11]: i2=c1('jerry')

In [12]: i2.name

Out[12]: 'jerry'

In [13]: i1.info,i2.info

Out[13]: ('from class', 'from class')

__init__() :这个是类的内置方法,从超类object继承而来,作用是在类实例化的时候,自动执行一遍(这也是为什么要以两个下划线开头的原因,python解释器根据这些标记知道其有特殊含义,会执行特殊的操作),如果没有这个函数,我们就得手动执行函数里面的内容。

self的作用:self起到类似记录实例名的作用,比如在本例中 i1=c1('tom'),python解释器会自动执行 c1.__init_(i1,'tom') 操作,所以这里self就被替换成了i1实例名,而且因为python强制self放在第一位,由此,我们可以猜想,python是根据位置来传递实例名,而不是根据self关键字来传递的,事实也证明确实如此。

证明:

In [19]: class c1():

...: info='from class'

...: def __init__(s,myname):

...: s.name=myname

...: def printName(s):

...: print s.name

...:

In [20]: i3=c1('hello')

In [21]: i3.name

Out[21]: 'hello'

In [22]: i4=c1('word')

In [23]: i4.name

Out[23]: 'word'

In [24]: i3.info,i4.info

Out[24]: ('from class', 'from class')

In [25]: c1.__init__(i4,'jerry')

In [26]: i4.name

Out[26]: 'jerry'

其实类跟函数是很相似的,它也只是个可执行对象,只不过多了一些相关的控制机制

例子2:(类的继承和回调)

In [28]: class c1():

...: info='from c1'

...: def __init__(self,x):

...: self.name=x

...: def printInfo(self):

...: print self.name

...:

In [30]: class c2(c1):

...: def printInfo(self):

...: print "hello,my name is : "

...: c1.printInfo(self)

...:

In [31]: ins1=c2('jane')

In [32]: ins1.printInfo()

hello,my name is :

jane

In [34]: c2.info

Out[34]: 'from c1'

c2类继承了c1类的所有属性和方法,但是c2改写了c1的printInfo方法,在c2的方法中对c1的printInfo进行调用也就是所谓的"回调"

例子3:(类属性的影响)

In [11]: class c1():

...: info='from c1'

...: def __init__(self,x):

...: self.name=x

...: def printInfo(self):

...: print self.name

...:

In [12]: ins1=c1('tom')

In [13]: ins2=c1('jerry')

In [14]: ins3=c1('boyka')

In [15]: ins1.info,ins2.info,ins3.info

Out[15]: ('from c1', 'from c1', 'from c1')

In [16]: ins2.info='change one'

In [17]: ins1.info,ins2.info,ins3.info

Out[17]: ('from c1', 'change one', 'from c1')

In [18]: c1.info='change all ins'

In [19]: ins1.info,ins2.info,ins3.info

Out[19]: ('change all ins', 'change one', 'change all ins')

从上面可以看到ins2这个实例改变自身的info属性,不会影响到ins1和ins3,而c1类的info的改变,则改变了ins1和ins3,这是因为在实例化ins1,ins2,ins3的时候,(借用c语言的指针概念)它们都指向了类的info指针,而info指针指向了'from c1'这个数据块。默认情况下,当我们访问ins2.info的时候,python通过ins2的info指针找到类的info指针,然后通过类的info指针取得'from c1'数据。 当ins2.info重新赋值的时候,它新建一个数据对象'chang one',然后把自己的info指向'change one',所以ins1,ins3不受影响,而c1.info重新赋值的时候,它也是新建一个'change all ins'对象,然后类的info指针指向'change all ins',而此时ins1和ins3的指针还是指向类的info指针,所以ins1和ins3的info取回的值都变了 (这个解释是错的,因为这样ins1.info和ins3.info的id应该不变,但是我测试是变化的,这里为了便于理解记忆暂时这么解释,待查明)

python有什么内容_python的类(简介,没什么内容)相关推荐

  1. python xlwt追加内容_python 往excel中追加内容

    from xlrd import open_workbook from xlutils.copy import copy #在创建好的excel种追加新的数据 if __name__ == '__ma ...

  2. python隐藏部分代码_python隐藏类中属性的3种实现方法

    方法一: 效果图一: 代码一: # 定义一个矩形的类 class Rectangle: # 定义初始化方法 def __init__(self,width,height): self.hidden_w ...

  3. python简述列表特征_python高级特性简介

    Python中的五种特性:切片,迭代,列表生成式,生成器,迭代器. 切片 切片就相当于其他语言中的截断函数,取部分指定元素用的. L = list(range(100)) #利用切片取部分元素 pri ...

  4. python替换 输入手机号_python file模块 替换输入内容脚本

    root@python-10:/home/liujianzuo/python/test# ls passwd rc.local test1 root@python-10:/home/liujianzu ...

  5. python html模块调用_Python html 模块简介

    1 html.entities HTML 实体 name2codepoint 将 HTML 实体名称映射到 Unicode 代码点: html5 将 HTML5 命名字符引用映射到等效的 Unicod ...

  6. python找指定内容_python查找指定具有相同内容文件的方法

    本文实例讲述了python查找指定具有相同内容文件的方法.分享给大家供大家参考.具体如下: python代码用于查找指定具有相同内容的文件,可以同时指定多个目录 调用方式:python doubles ...

  7. python删除txt指定内容_python删除文件中指定内容

    更多追问追答 追问 我按你的方法试了下,文件内容还在,没有删掉...... 追答 把你的 file.txt 贴出来,确保 20150723 在要删除行的最开始,前面不能有空格等其他任何字符. 另外, ...

  8. python添加lxml库_Python lxml库简介

    lxml是一个Python库,使用它可以轻松处理XML和HTML文件,还可以用于web爬取.市面上有很多现成的XML解析器,但是为了获得更好的结果,开发人员有时更愿意编写自己的XML和HTML解析器. ...

  9. python爬去新浪微博_Python爬虫爬取新浪微博内容示例【基于代理IP】

    Python爬虫爬取新浪微博内容示例[基于代理IP] 发布时间:2020-09-07 10:08:14 来源:脚本之家 阅读:120 本文实例讲述了Python爬虫爬取新浪微博内容.分享给大家供大家参 ...

最新文章

  1. 人工智能及其应用(第5版).蔡自兴-4章课后习题。【部分参考答案】
  2. 京东这道面试题你会吗?
  3. 动态创建DeepZoom
  4. windows系统下批量修改文件后缀
  5. PyQt5应用与实践
  6. C++string容器应用举例
  7. Android makefile
  8. dataframe修改数据_数据处理进阶pandas入门(一)
  9. nusoap传递数组对象
  10. Python爬虫中最重要、最常见、一定要熟练掌握的库
  11. TensorFlow 学习指南 四、分布式
  12. 艾伟:WinForm控件开发总结(三)------认识WinForm控件常用的Attribute
  13. 安卓rom制作教程_【固件更新】极光ROM 小米MIX2、小米MAX2、小米Note3 MIUI11最新稳定版更新...
  14. 51单片机原理以及接口技术(四)--80C51的程序设计
  15. 通信原理及系统系列18—— 锁相环(鉴相器分析_1)
  16. CISCO 关闭4786端口解决方法 cisco IOS and IOS XE software Smart Install protocol Misuse
  17. 本机号码校验不只是免输密码、免输短信验证码
  18. 【python】用tkinter做一个最近很火的强制表白神器
  19. 【web开发】利用User-Agent获取浏览器类型
  20. 搜狗有一个超良心的功能 Ctrl+shift+E

热门文章

  1. unsigned int数相减时候的trick
  2. transform子元素,绝对定位失效
  3. IDES SAP SEM 4.0/SAP BW 3.50 笔记本安装手册
  4. BZOJ 1725: [Usaco2006 Nov]Corn Fields牧场的安排
  5. 备份容灾相关概念总结
  6. 《Unity着色器和屏幕特效开发秘笈》—— 1.7 创建渐变纹理来控制漫反射着色...
  7. icecandidate事件
  8. EmEditor正则表达式例子
  9. visio 2003 for enterprice architects 不需要安装VS2005,直接安装的方法
  10. 说说面向对象的故事,主人是人类!(三)