zoukankan      html  css  js  c++  java
  • python初体验(2)——面向对象篇

    在学习python的面向对象时,我始终参照的是c++的面向对象机制。相对而言,python的面向对象确实更简单一些。

    基础:

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

    __init__方法

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

    成员变量和类的变量,方法

    1. 类变量的定义:缩进和方法的缩进相同。引用的时候,需要使用class.变量名的方式。
    2. 对象变量的定义:要通过self.变量名的形式在__init__方法中定义。这个是合理:不可以把成员的定义散布在代码的各个地方。而且只能在这里定义,在其他的方法中是无法定义的。
    3. 如果在其他的方法中定义:self.变量名,那么它只能在这个方法中以self.变量名的方式调用。
    4. 而且,在对象方法的一级缩进上,self是不合法的。那个应该属于类的区域。
    5. 是否可以定义一个类的全局的方法,类似于c++的static方法?也许python根本就不需要这么做,有他的处理方案。什么方案?后面要了解一下。

    析构函数

    __del__方法相当于他的析构函数,在对象被销毁的时候调用。

    级别

    如何定义private和public?默认的,都是public,如果名称加双下划线:__,这表示是private。有点怪。

    继承:

    继承时成员特性:

    1. 对于类的成员,在子类中可以通过父类.变量名或者子类.变量名来访问,是相同的。
    2. 对于对象的成员,在子类中通过self.变量名来访问。但是无法访问以__开头的的私有变量。

    继承时方法的特性:

    1. 生成子类的构造函数的时候,不会自动调用父类的构造函数,你必须手动调用它。同时,在对象释放的时候,同样要手动调用析构函数。
    2. 子类的构造函数和析构函数可以不定义,如果不定义的话,这会调用基类的构造和析构函数。
    3. Python不存在动态绑定和静态绑定。这一点和c++不同。
    4. 如果基类有一个public函数,子类中重新定义一个和他名称相同,但是多一个参数的函数,多的这个参数使用默认参数。这样来调用的话,调用的子类的函数,而不是父类的函数。应该是这样。

    这种继承模型确实非常简单。

    特殊方法:

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

    其他:

    1. 文件:3.0后,打开文件的函数变为了open而不是原有的file。文件必须要close吗?如果不close是否会泄露?
    2. 存储器:Cpickle模块能够将一个对象完整的存储在一个文件中,后面可以再把它给打开,一模一样。在3.0中,模块Cpickle和pickle都合为pickle。
    3. 列表综合:可以从一个已有的列表导出一个新的列表。
    4. 可以在函数中通过*和**接受元组和列表。
    5. Lambda可以生成一个新的函数对象。
    6. Exec函数和eval函数可以自行保存在字符串中的python语句。这个将运行编写更加智能的代码。

    进一步学习计划

    我在工作中的主要语言是c和c++。听说google在工作中会用python和c++一起编程,python用作胶水语言。混搭可能会成为一种趋势,可以充分的发挥各个语言的优势。我会在工作中找机会尝试一下,看效果如何。我认为,一个语言能够方便的调用其他的语言,以及被其他语言调用,可能会成为一个语言的重要的一个特性。

    其次,我一直以来都想开发一个关于学习的网站,同时,Google App Engine支持python,所以,我可能会利用业余时间用python开发一个运行在google app engine的网站。

    下一步的学习资料,我选择的是《深入理解Python》,希望能够更深一步的了解python。同时,我可能会找一些相关的源码来学习一些如何使用python开放大型程序。

  • 相关阅读:
    使用某些 DOCTYPE 时会导致 document.body.scrollTop 失效
    VB.NET 笔记1
    知识管理系统Data Solution研发日记之一 场景设计与需求列出
    知识管理系统Data Solution研发日记之五 网页下载,转换,导入
    折腾了这么多年的.NET开发,也只学会了这么几招 软件开发不是生活的全部,但是好的生活全靠它了
    分享制作精良的知识管理系统 博客园博客备份程序 Site Rebuild
    知识管理系统Data Solution研发日记之四 片段式数据解决方案
    知识管理系统Data Solution研发日记之二 应用程序系列
    知识管理系统Data Solution研发日记之七 源代码与解决方案
    知识管理系统Data Solution研发日记之三 文档解决方案
  • 原文地址:https://www.cnblogs.com/chgaowei/p/2062418.html
Copyright © 2011-2022 走看看