设为首页 收藏本站
查看: 861|回复: 0

[经验分享] python初体验(2)——面向对象篇

[复制链接]

尚未签到

发表于 2015-4-21 11:01:23 | 显示全部楼层 |阅读模式
  在学习python的面向对象时,我始终参照的是c++的面向对象机制。相对而言,python的面向对象确实更简单一些。
  基础:

  • 整数也被作为对象。前面就看到过,说所有的东西都是对象,包括函数。
  • 属于一个对象或类的变量被称为域——这个名称有点奇怪,c++叫成员。
  • 域分为两种,分别属于对象和属于类——其实就是成员和静态成员。
  • Self指针:相当于c++中的this。文档是否有问题,c++有self吗?
  • 类的方法的第一个参数必须是self?为什么?目前来说不带self是会运行失败的。
  __init__方法

  • 类的构造函数是__init__方法,它在创建类的时候调用。
  • 它并不是必须的,可以没有。
  • 它可以有多个,运行的时候不会出错,但是只可以调用参数最多的那个。其他的一调用就有问题。
  成员变量和类的变量,方法

  • 类变量的定义:缩进和方法的缩进相同。引用的时候,需要使用class.变量名的方式。
  • 对象变量的定义:要通过self.变量名的形式在__init__方法中定义。这个是合理:不可以把成员的定义散布在代码的各个地方。而且只能在这里定义,在其他的方法中是无法定义的。
  • 如果在其他的方法中定义:self.变量名,那么它只能在这个方法中以self.变量名的方式调用。
  • 而且,在对象方法的一级缩进上,self是不合法的。那个应该属于类的区域。
  • 是否可以定义一个类的全局的方法,类似于c++的static方法?也许python根本就不需要这么做,有他的处理方案。什么方案?后面要了解一下。
  析构函数
  __del__方法相当于他的析构函数,在对象被销毁的时候调用。
  级别
  如何定义private和public?默认的,都是public,如果名称加双下划线:__,这表示是private。有点怪。
  继承:
  继承时成员特性:

  • 对于类的成员,在子类中可以通过父类.变量名或者子类.变量名来访问,是相同的。
  • 对于对象的成员,在子类中通过self.变量名来访问。但是无法访问以__开头的的私有变量。
  继承时方法的特性:

  • 生成子类的构造函数的时候,不会自动调用父类的构造函数,你必须手动调用它。同时,在对象释放的时候,同样要手动调用析构函数。
  • 子类的构造函数和析构函数可以不定义,如果不定义的话,这会调用基类的构造和析构函数。
  • Python不存在动态绑定和静态绑定。这一点和c++不同。
  • 如果基类有一个public函数,子类中重新定义一个和他名称相同,但是多一个参数的函数,多的这个参数使用默认参数。这样来调用的话,调用的子类的函数,而不是父类的函数。应该是这样。
  这种继承模型确实非常简单。
  特殊方法:

  • __init__(self,...)   这个方法在新建对象恰好要被返回使用之前被调用。
  • __del__(self)    恰好在对象要被删除之前调用。
  • __str__(self)   在我们对对象使用print语句或是使用str()的时候调用。
  • __lt__(self,other)    当使用 小于运算符(等等)都有特殊的方法。
  • __getitem__(self,key)    使用x[key]索引操作符的时候调用。
  • __len__(self)    对序列对象使用内建的len()函数的时候调用。
  其他:

  • 文件:3.0后,打开文件的函数变为了open而不是原有的file。文件必须要close吗?如果不close是否会泄露?
  • 存储器:Cpickle模块能够将一个对象完整的存储在一个文件中,后面可以再把它给打开,一模一样。在3.0中,模块Cpickle和pickle都合为pickle。
  • 列表综合:可以从一个已有的列表导出一个新的列表。
  • 可以在函数中通过*和**接受元组和列表。
  • Lambda可以生成一个新的函数对象。
  • Exec函数和eval函数可以自行保存在字符串中的python语句。这个将运行编写更加智能的代码。
  进一步学习计划
  我在工作中的主要语言是c和c++。听说google在工作中会用python和c++一起编程,python用作胶水语言。混搭可能会成为一种趋势,可以充分的发挥各个语言的优势。我会在工作中找机会尝试一下,看效果如何。我认为,一个语言能够方便的调用其他的语言,以及被其他语言调用,可能会成为一个语言的重要的一个特性。
  其次,我一直以来都想开发一个关于学习的网站,同时,Google App Engine支持python,所以,我可能会利用业余时间用python开发一个运行在google app engine的网站。
  下一步的学习资料,我选择的是《深入理解Python》,希望能够更深一步的了解python。同时,我可能会找一些相关的源码来学习一些如何使用python开放大型程序。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-59178-1-1.html 上篇帖子: [Python] Python 之 __new__() 方法与实例化 下篇帖子: python difflib详解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表