~欢迎进来我的博客~蛋叔的小乖乖~

父与子的编程--对象

本章总结:

1什么是对象

2什么是属性

3什么是方法

4什么是点记法

5如何创建对象

6什么是类

7什么是实例

8如何初始化对象

9__str__()作用

10__int__()作用

11什么是self

12类名的命名规则

13隐藏数据

14多态、继承

15代码桩

 

 

 

 

 

对象:可以把函数和数 据收集在一起。这个主意在编程中非常 有用,而且在很多很多的程序中都已经 用到。实际上,如果仔细分析 Python, 几乎一切都是对象。按编程的术语来 讲,我们说 Python 是面向对象的(object oriented)。这说明,Python 中可以使用对 象(实际上这也相当容易)。并不是一定 得创建自己的对象,不过这样可以让很 多事情更容易一些。

在 Python 中,一个对象的特征(或“你知道的事情”)也称为属性(attribute), 这应该很好记。动作(或“能够对对象做的操作”)称为方法(method)。

什么是属性:包含在对象中的函数

什么是方法:它们是一些代码块,可以调用这些代码块来完 成某个工作。听起来很熟悉?没错,方法就是包含在对象中的函数

对象=属性+方法

可以利用对象,把一个东西的属性和方法收集在一起,属性是信息,方法是动作。

性和方法的一种记法:object.attribute或 object.method()。 称为点记法

创建对象:

在 Python 中,对象的描述或蓝图称 为一个类(class)

使用类来建立一个真正的 对象。这个对象称为这个类的一个实例(instance)

 

创建一个对象实例

类定义并不是一个对象。这只是蓝图。现在来盖真正的房子

如果想创建 Ball的一个实例,可以这样做:

  

 

 

 初始化对象

创建球对象时,并没有在 size、color或 direction中填入任何内容。必须在 创建对象之后填充这些内容。不过有一种方法可以在创建对象时设置属性。这称为 初始化对象。
术语箱
初始化(initializing)表示“开始时做好准备”。在软件中对某个东西初始化 时,就是把它设置成一种我们希望的状态或条件,以备使用。
创建类定义时,可以定义一个特定的方法,名为__init__(),只要创建这个类 的一个新实例,就会运行这个方法。可以向__init__()方法传递参数,这样创建实 例时就会把属性设置为你希望的值。代码清单 14-3 显示了这是如何实现的。 

 

如果这个程序,得到的输出应该与代码清单 14-2 的相同。区别在于,代码清单 14-2 的相同。区别在于,代码清单 14-3 使用了__init__()方法来设置属性。

 

 

 方法 : __str__()

你创建类时 Python 自动包含的一些方法。Python 程序员通常把它 们叫做特殊方法(special method)。

__init__()方法会在对象创建时完成初始化。每个对象都内置 有一个__init__()方法。如果你在类定义中没有加入自己的__init__()方法,就 会有这样一个内置方法接管,它的工作就是创建对象。

__str__(),它会告诉 Python 打印(print)一个对象时具 体显示什么内容。Python 会默认以下内容。

  • 实例在哪里定义(卡特的例子中,就是在ˆˆ __main__中,这是程序的主部分)
  • 类名( Ball)。
  • 存储实例的内存位置(0x00BB83A0部分)

不过,如果你希望 print为对象显示其他的内容,可以定义自己的__str__(), 这会覆盖内置的__str__()方法。代码清单 14-4 举了个例子

 

 什么是self

 

 

方法必须知道是哪个实例调用了它。是cartersBall 需要反弹吗?还是warrens Ball ?self参数会告诉方法哪个对象调用它。这称为实例引用(instance reference)。

顺便说一句,self 这个名字在 Python 中没有任何特殊的含义。只不 过所有人都使用这个实例引用名。这 也是让代码更易读的一个约定。也可 以把这个实例变量命名为你想要的任 何名字,不过强烈建议你遵循这个约 定,因为使用 self 能减少混乱。

类名都是以大写字母开头

 一个实例类--热狗

 

 

隐藏数据:

按编程术语来讲,如果限制对对象数据的访问,使得只能通过使用方法来获 取和修改这些数据,就称为数据隐藏(data hiding)。Python 没有提供任何途径来 保证数据隐藏,不过如果你愿意,可以适当地编写代码来遵循这个规则。

 

 

多态和继承

我们来看对象最为重要的两个方面:多态(polymorphism)和继承 (inheritance)。这两个词很长很深奥,不过正是因为有这两个方面,才使得对象如此 有用。我会在下面几节清楚地解释它们的含义。

多态—同一个方法,不同的行为:

多态是指对于不同的类,可以有同名的两个(或多个)方法。取决 于这些方法分别应用到哪个类,它们可以有不同的行为。

例如,假设你要建立一个程序做几何题,需要计算不同形状的面积,比如三角 形和正方形。你可以创建两个类,如下:

 

 

 

 

继承---向父母学习

在面向对象编程中,类可以从其他类继承属性和方法。这样就有了类的整个 “家族”,这个“家族”中的每个类共享相同的属性和方法。这样一来,每次向“家 族”增加新成员时就不必从头开始。

从其他类继承属性或方法的类称为派生类(derived class)或子类(subclass)。 可以举一个例子来解释这个概念。

假想我们要建立一个游戏,玩家一路上可以捡起不同的东西,比如食物、钱 或衣服。可以建一个类,名为 GameObject。GameObject 类有 name 等属性(例如 coin、apple 或 hat)和 pickUp()等方法(它会把硬币增加到玩家的物品集合中)。所 有游戏对象都有这些共同的方法和属性。
然后,可以为硬币建立一个子类。Coin 类从 GameObject 派生。它要继承 GameObject 的属性和方法,所以 Coin 类会自动有一个 name 属性和 pickUp() 方法。 Coin 类还需要一个 value 属性(这个硬币价值多少)和一个 spend() 方法(可以用 这个硬币去买东西)。

 

 

未雨绸缪---代码桩

在上面的例子中,我们并没有在方法中加入任何实际代码,只有一些注释来解释 这些方法要做什么。,是对以后要增加的内容提前做出计划 或提前考虑。具体的代码要取决于游戏如何工作。程序员编写比较复杂的代码时通常 就会采用这种做法来组织他们的想法。空函数或者方法称为代码桩。

如果想运行前面的例子,会得到一条错误消息,因为函数定义不能为空

如果希望建立一个代码桩,可以使用 Python 的 pass 关键字作为一个占位符。 代码实际上应该像下面这样:

 

 


 

 

posted @ 2019-12-22 21:25  qq的天马行空  阅读(217)  评论(0)    收藏  举报
蛋叔的小乖乖