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

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

1. 最简单的  Python 类

class Loaf: (1)

pass (2) (3)

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

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

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

2. 定义  Fi le Info  类

from UserDict import UserDict

class FileInfo(UserDict): (1)

(1)  在 Python 中,类的基类只是简单地列在类名后面的小括号里。所以 FileInfo 类是从 UserDict 类 (它是从 UserDict模块导进来的 ) 继承来的。UserDict 是一个像字典一样工作的类,它允许你完全子类化字典数据类型,同时增加你自已的行为。(也存在相似的类 UserList 和 UserString ,它们允许你子类化列表和字符串。)

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

3. 初始化并开始类编码

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

class FileInfo(UserDict):

"store file metadata" (1)

def __init__(self, filename=None): (2) (3) (4)

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

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

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

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

4. 编写  FileInfo  类

class FileInfo(UserDict):

"store file metadata"

def __init__(self, filename=None):

UserDict.__init__(self) (1)

self["name"] = filename (2)

(3)

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

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

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

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

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

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

6. __init__ 方法

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

python保留字_开始了类定义_Python 类的定 义相关推荐

  1. python函数打上去说未定义_Python:名称未定义错误,即使函数被明确定义为b

    我是python新手,在函数定义方面有一个奇怪的问题.我已经检查了论坛,并确保在调用之前定义了我的函数,但是这并没有帮助解决问题.当我试图在这个特定的方法中按字面方式调用函数时,总是会遇到一个未定义名 ...

  2. python中扑克牌类设计_Python类的基础设计、使用

    类是事物功能和属性的抽象,对象是类的实例化.就像人人都知道小汽车可以干什么什么的,但光想小汽车如何好是没有用的,得开车或坐才能感受到小汽车的好.人脑里的小汽车是抽象的,即类,而坐上的某辆车是小汽车的实 ...

  3. 类定义和类实现的分离

    C++允许将类的定义和实现分离.类定义描述了类的"约定",而类实现则实现了这一约定.类定义简单地列出所有数据域.构造函数原型和函数原型,类实现给出构造函数和成员函数的实现. 两者可 ...

  4. python中类的定义_python 类中定义类

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 现有自定义类(color.py)如下,类位于路径'userschuxingpyt ...

  5. python定义函数需要保留字def_定义函数时要用到哪一个python保留字?_学小易找答案...

    [简答题]常见的足部畸形有哪些?例举6种以上. [其它]请将会计学小册子第四章完成情况(选择+判断+业务题2. 6.)的所有内容拍照上传嗷 [其它]以小组为单位进行现场调研,对足球场外的广场区域植物造 ...

  6. python类和对象的定义_python类与对象基本语法

    面向对象编程的2个非常重要的概念:类和对象. 对象是面向对象编程的核心,在使用对象的过程中,为了将具有共同特征和行为的一组对象抽象定义,提出了另外一个新的概念--类. 本人学习笔记基于python2的 ...

  7. emit python 作用_.NET高级特性-Emit(2)类的定义

    在上一篇博文发了一天左右的时间,就收到了博客园许多读者的评论和推荐,非常感谢,我也会及时回复读者的评论.之后我也将继续撰写博文,梳理相关.NET的知识,希望.NET的圈子能越来越大,开发者能了解/深入 ...

  8. int是不是python保留字_下面不属于Python保留字的是:

    [填空题]作解剖定位时,家畜前.后肢的后面分别称为( )和( ). [单选题]世界上第一条高速铁路是 [单选题]Z+Z* = ? [单选题]下面不属于Python保留字的是: [单选题]The acc ...

  9. python中的继承有什么特点_python类的继承是什么?类的继承有什么样的规则?

    在这篇文章之中我们来了解一下python类的继承,对于刚刚接触到python这一编程语言的朋友来说,对于python类的继承的了解应该比较少,不过没关系,在接下来的文章之中我们就来了解一下python ...

最新文章

  1. 大剑无锋之如何查看一个java进程的堆内存使用情况(jps,jstack,jmap)【面试推荐】
  2. html图片宽度高度等比例绽放,css图片自动绽放大小,左右,上下居中
  3. html页面缓存meta,html中怎么用meta语句禁用页面缓存?
  4. win10 flashcs6不能用了_听说这版win10马上不能用了?那就改装“它”,比win7还稳定流畅...
  5. 用dockers实现mysql主从同步
  6. java虚拟机的数据_Java虚拟机运行时数据区域
  7. 通达信公式改成python_通达信 修改为选股公式
  8. 磁盘阵列卡 远程监控(MegaRAID Storage Manager)(一)
  9. oso kabuwj severe conime 美女病毒 重要文件.exe : 通过移动设备引发的血案...
  10. TM1650芯片使用经验
  11. 问题 D: 寻找丢失的LZY
  12. python处理csv文件计算均值_读取CSV文件,计算平均值并打印所述平均值
  13. 通过U盘安装windows简易教程
  14. matlab里vSAS,科学网—【MATLAB】saveas和print保存图片的格式 - 叶瑞杰的博文
  15. ppt文字磨砂玻璃效果制作教程
  16. 2G,3G,4G网络架构浅谈——4G(LTE)
  17. freeRTOS出现任务卡死的情况。
  18. 摄影笔记一:《李元谈摄影修炼之道》
  19. HTML5训练营,HTML5 足球俱乐部/训练营网站模板
  20. 2019公众号引流小诀窍大汇总

热门文章

  1. 机器学习_线性回归_回归系数
  2. 重塑云通讯,斩马视觉智能
  3. 海睿思分享 | 浅谈企业数据资产管理
  4. 微信公众平台服务器配置启用说明
  5. StatCounter
  6. springboot 导出CSV
  7. 又一大波僵尸向社交网络来了
  8. WAS 升级JDK1.8
  9. oracle 应收票据,应收票据请求错误 - Oracle ERP - ITPUB论坛-中国专业的IT技术社区...
  10. 知识图谱实战应用9-基于neo4j的知识图谱框架设计与类模型构建