为什么80%的码农都做不了架构师?>>>   

Python 是完全面向对象的:你可以定义自已的类,从自已的或内置的类继承,然后从你定义的类创建实例。

在 Python 中定义类很简单。就像定义函数,没有单独的接口定义。只要定义类,然后就可以开始编码。Python 类以保留字 class 开始,后面跟着类名。从技术上讲,有这些就够了,因为一个类并非必须从其它类继承。

例 5.3. 最简单的 Python 类

class Loaf: 
pass     

*

这个类的名字是 Loaf,它没有从其它类继承。类名通常是第一个字母大写,如:EachWordLikeThis,但这只是一个习惯,不是一个必要条件。

*

这个类没有定义任何方法或属性,但是从语法上,需要在定义中有些东西,所以你使用 pass。这是一个 Python 保留字,仅仅表示 “向前走,不要往这看”。它是一条什么都不做的语句,当你删空函数或类时,它是一个很好的占位符。

*

你可能猜到了,在类中的所有东西都要缩近,就像位于函数、if 语句,for 循环,诸如此类的代码。第一条不缩近的东西不属于这个类。

*  在 Python 中的 pass 语句就像 Java 或 C 中的大括号空集 ({})。

当然,实际上大多数的类都是从其它的类继承来的,并且它们会定义自已的类方法和属性。但是就像你刚才看到的,除了名字以外,类没有什么必须要具有的。特别是,C++ 程序员可能会感到奇怪,Python 的类没有显示的构造函数和析构函数。Python 类的确存在与构造函数相似的东西:__init__ 方法。

例 5.4. 定义 FileInfo 类

from UserDict import UserDict

class FileInfo(UserDict): 

*

在 Python 中,类的基类只是简单地列在类名后面的小括号里。所以 FileInfo 类是从 UserDict 类 (它是从 UserDict 模块导进来的) 继承来的。UserDict 是一个像字典一样工作的类,它允许你完全子类化字典数据类型,同时增加你自已的行为。{也存在相似的类 UserList 和 UserString ,它们允许你子类化列表和字符串。)[2] 在这个类的背后有一些“巫术”,我们将在本章的后面,随着更进一步地研究 UserDict 类,揭开这些秘密。

*  在 Python 中,类的基类只是简单地列在类名后面的小括号里。不像在 Java 中有一个特殊的 extends 关键字。

Python 支持多重继承。在类名后面的小括号中,你可以列出许多你想要的类名,以逗号分隔。

5.3.1. 初始化并开始类编码

本例演示了使用 __init__ 方法来进行 FileInfo 类的初始化。

例 5.5. 初始化 FileInfo 类

class FileInfo(UserDict):
"store file metadata"              
def __init__(self, filename=None):   

*

类也可以 (并且应该) 有 doc strings ,就像方法和函数一样。

*

__init__ 在类的实例创建后被立即调用。它可能会引诱你称之为类的构造函数,但这种说法并不正确。说它引诱,是因为它看上去像 (按照习惯,__init__ 是类中第一个定义的方法),行为也像 (在一个新创建的类实例中,它是首先被执行的代码),并且叫起来也像 (“init”当然意味着构造的本性)。说它不正确,是因为对象在调用 __init__ 时已经被构造出来了,你已经有了一个对类的新实例的有效引用。但 __init__ 是在 Python 中你可以得到的最接近构造函数的东西,并且它也扮演着非常相似的角色。

*

每个类方法的第一个参数,包括 __init__,都是指向类的当前实例的引用。按照习惯这个参数总是被称为 self。在 __init__ 方法中,self 指向新创建的对象;在其它的类方法中,它指向方法被调用的类实例。尽管当定义方法时你需要明确指定 self,但在调用方法时,你不 用指定它,Python 会替你自动加上的。

*

__init__ 方法可以接受任意数目的参数,就像函数一样,参数可以用缺省值定义,即可以设置成对于调用者可选。在本例中,filename 有一个缺省值 None,即 Python 的空值。

*  习惯上,任何 Python 类方法的第一个参数 (对当前实例的引用) 都叫做 self。这个参数扮演着 C++ 或 Java 中的保留字 this 的角色,但 self 在 Python 中并不是一个保留字,它只是一个命名习惯。虽然如此,也请除了 self 之外不要使用其它的名字,这是一个非常坚固的习惯。

例 5.6. 编写 FileInfo 类

class FileInfo(UserDict):
"store file metadata"
def __init__(self, filename=None):
UserDict.__init__(self)        
self["name"] = filename        

*

一些伪面向对象语言,像 Powerbuilder 有一种“扩展”构造函数和其它事件的概念,即父类的方法在子类的方法执行前被自动调用。Python 不是这样,你必须显示地调用在父类中的合适方法。

*

我告诉过你,这个类像字典一样工作,那么这里就是第一个印象。我们将参数 filename 赋值给对象 name 关键字,作为它的值。

*

注意 __init__ 方法从不返回一个值。

5.3.2. 了解何时去使用 self 和 __init__

当定义你自已的类方法时,你必须 明确将 self 作为每个方法的第一个参数列出,包括 __init__。当从你的类中调用一个父类的一个方法时,你必须包括 self 参数。但当你从类的外部调用你的类方法时,你不必对 self 参数指定任何值;你完全将其忽略,而 Python 会自动地替你增加实例的引用。我知道刚开始这有些混乱,它并不是自相矛盾的,因为它依靠于一个你还不了解的区别 (在绑定与非绑定方法之间),故看上去是矛盾的。

噢。我知道有很多知识需要吸收,但是你要掌握它。所有的 Python 类以相同的方式工作,所以一旦你学会了一个,就是学会了全部。如果你忘了别的任何事,也要记住这件事,因为我认定它会让你出错:

*  __init__ 方法是可选的,但是一旦你定义了,就必须记得显示调用父类的 __init__ 方法 (如果它定义了的话)。这样更是正确的:无论何时子类想扩展父类的行为,后代方法必须在适当的时机,使用适当的参数,显式调用父类方法。

转载于:https://my.oschina.net/tlkt/blog/210582

5.对象和面向对象3——类的定义相关推荐

  1. php面向对象程序设计,PHP面向对象程序设计类的定义与用法简单示例

    本文实例讲述了PHP面向对象程序设计类的定义与用法.分享给大家供大家参考,具体如下: class Person { private $name; private $sex; private $age; ...

  2. 【C++学习】类与对象(一)——类的定义与对象实例

    一.面向对象程序设计的基本特点 1.1 抽象 面向对象方法中的抽象 ,是指对具体问题(对象)进行概括,抽出一类对象的公共性质并加以描述的过程. 一个问题的抽象包括:数据抽象和行为抽象(或被称为功能抽象 ...

  3. 狼人杀与血染钟楼的【JAVA面向对象】————类和对象

    目录 一.类 1.什么是类 2.类的定义 3.类的构成 二.对象 1.什么是对象 2.对象的实现 三.static 一.类 1.什么是类 天黑请闭眼! 现在是狼人杀的时间,好了,现在你拿的身份是狼人. ...

  4. java类对象实验问题_Java类与对象实验答案

    Java类与对象实验答案Tag内容描述: 1.Java实验报告 计科.信工版2013-2014-2 实验报告 一.实验项目:类与对象 二.实验目的: 1. 学会使用类来封装对象的属性和功能 2. 掌握 ...

  5. 从Java到Go面向对象--类的定义和实例化对象

    2019独角兽企业重金招聘Python工程师标准>>> 面向对象基本思想 类.对象. #面向对象三大特征 封装.继承.多态. 接下来我会一一介绍Go的面向对象编程 Java中类的定义 ...

  6. 3-1:类与对象入门——类的引入和类的定义以及访问限定符和封装还有对面向对象的理解

    文章目录 一:面向对象与面向过程 二:类的引入 三:类的定义 (1)C++类的定义 (2)类的两种定义方式 A:声明和定义全部放在类体中 B:定义和声明分开放 四:类的访问限定符及封装 (1)访问限定 ...

  7. Java面向对象思想、类的定义、对象的使用、对象内存图、成员变量和局部变量的区别、封装、private关键字、this关键字、构造方法、JavaBean-day06

    目录 第1节 面向对象思想 1.1 面向对象思想概述 概述 举例 特点 1.2 类和对象 什么是对象 类与对象的关系 1.3 类的定义 事物与类的对比 类的定义格式 1.4 对象的使用 对象的使用格式 ...

  8. C++面向对象编程类对象的定义

    Ⅰ:类概念 一:类的构成 class 类名 {public:公有数据成员和成员函数:类的接口protected:保护数据成员和成员函数:private: 私有数据成员和成员函数: }://注意一定不要 ...

  9. 面向过程和面向对象的设计思想、java类、Java类的定义、java对象、对象的创建和使用、类和对象、变量分类、方法分类、构造方法、方法的重载

    1.面向过程和面向对象的设计思想 面向过程:procedure oriented programming 缩写 POP. 分析出解决问题所需要的步骤,然后把步骤一步一步实现. 面向过程直接关注流程. ...

最新文章

  1. DeepMind的新强化学习系统是迈向通用AI的下一步吗?
  2. struts.xml配置文件中result的语法
  3. 号称要打败阿尔法狗的DeepZenGo 高调挑战人类
  4. 内存泄漏检测工具(转载)
  5. docker pull 从仓库拉取镜像
  6. php七牛云rtmp直播推流,GitHub - jangocheng/FlutterQiniucloudLivePlugin: Flutter 七牛云直播云 推流/播放 SDK集成...
  7. 【多题合集】AC自动机练习,被HDU支配的恐惧
  8. mschart走势图 vc_VC++6.0中MsChart控件的用法
  9. java基础-软件简述
  10. 关于mac 和其它osx系统添加 微软雅黑字体 适用于安装字体报错或者安装失败
  11. 云网资源如何搭乘「数字孪生」的快车道?
  12. Android修改实战教程(漫放软件)
  13. python自动化测试-最常用的自动化测试框架
  14. ue转换文件格式linux,关于windows与unix之间文件格式转换问题。UE编辑器中(CR/LF)问题...
  15. 机器人改变生活利弊英语作文_机器人的利弊作文
  16. 证书生成(keystore、truststore、.crt、.key)。
  17. Missionaries from the global south try to save the godless West
  18. (总结)什么是HTML语义化
  19. Flutter练习:实现自定义的分页指示器
  20. 不想打工了,手里有10万,想回农村老家创业,却不知道做什么,请各位指点迷津,谢谢?

热门文章

  1. cisco设备运维常用命令 总结-1
  2. Dojo入门:DOM操作
  3. GlusterFS的安装及使用
  4. Unicode 和 UTF-8关系
  5. 20145222黄亚奇《Java程序设计》第8周学习总结
  6. Unity3d 网络编程(一)(Unity3d内建网络Network介绍)
  7. STM32 逐次逼近寄存器型(SAR)模拟数字转换器(ADC)
  8. Ubuntu 12.10 安装 PHP
  9. com学习笔记(6)类厂
  10. Sql Server函数全解三数据类型转换函数和文本图像函数