文章目录

  • 一 Python中的对象
  • 二 对象=属性+方法
  • 三 创建对象
    • (1) 创建一个对象实例
    • (2) 初始化对象
    • (3) 神奇的__str__( )
  • 四 一个实例类——HotDog
    • (1) 定义类 初始化
    • (2) 建立方法
    • (3) 测试
    • (4) 增加配料和__str__( )的使用
  • 五 多态和继承
    • (1) 多态
    • (2) 继承
  • 做几个练习

一 Python中的对象

在Python中定义什么是对象,拿球做例子。可以操作一个球,比如捡球、踢球、抛球等。我们把这些操作称为动作。还可以通过颜色、重量和大小来描述一个球。这些就是球的属性。在Python中,一个对象的特征也称为属性,动作称为方法。

如果要建立一个球的Python版本或者模型,球就是一个对象,它要有属性和方法。

球的属性可能是 (这些都是关于球的描述):

ball.color
ball.size
ball.weight

球的方法可能有 (这些都是可能对球做的操作):

ball.kick()
ball.throw()
ball.inflate()

二 对象=属性+方法

什么是属性:

属性就是你所知道的关于球的所有方面,球的属性就是一些信息(数字、字符串等),没错,它们就是变量,只不过是包含在对象中的变量。

可以显示:

print ball.size

可以给它们赋值:

ball.color = "green"

可以把它们赋值给常规的、不是对象的变量:

mycolor = ball.color

还可以把它们赋给其他对象的属性:

myball.color = yourball.color

什么是方法:

方法就是可以对对象做的操作,它们是一些代码块。可以调用这些代码来完成某个工作,是不是很熟悉?方法其实就是在对象中的函数。函数能做到的,方法都能做到,包括传递参数和返回值。

所以利用对象,可以把一个东西的属性和方法收集到一起。

三 创建对象

Python中创建对象包括两步:

第一步是描述对象。Python中对象的描述或蓝图称为一个
第二步是使用类建立一个对象。这个对象称为这个类的一个实例。

class Ball:def bounce(self):if self.direction == "down":self.direction == "up"

上例是一个球的类定义,其中一个方法bounce( )。属性并不属于类,它们属于各个实例。因为每个实例可以有不同的属性。

(1) 创建一个对象实例

前边说过,类定义并不是一个对象,只是一个蓝图。现在来真正的“盖房子”。

class Ball:def bounce(self):if self.direction == "down":self.direction = "up"myball = Ball()
myball.direction = "down"
myball.color = "red"
myball.size = "small"print "I just created a ball."
print "My ball is",myball.size
print "My ball is",myball.color
print "My ball's direction is",myball.direction
print "Now I'm going to bounce the ball."
print
myball.bounce()
print "Now the ball's direction is",myball.direction


调用bounce( ) 方法会把球的方向从 down 改为 up,这正是bounce( )方法中要做的。

(2) 初始化对象

创建球对象时,并没有在size、color、或direction中填入任何内容,必须在创建对象后填充这些内容。而初始化对象就是可以在创建对象时设置属性。

class Ball:def __init__(self, color,size,direction):self.color = colorself.size = sizeself.direction = directiondef bounce(self):if self.direction == "down":self.direction = "up"myball = Ball("red", "small", "down")print "I just created a ball."
print "My ball is",myball.size
print "My ball is",myball.color
print "My ball's direction is",myball.direction
print "Now I'm going to bounce the ball."
print
myball.bounce()
print "Now the ball's direction is",myball.direction


这里需要注意一个地方:
函数__init__( ),两边的下划线是双下划綫,而不是单下划线 _init( ) _,用错会出现这样的错误:

Traceback (most recent call last):File "F:\Python文件\5-1 对象.py", line 11, in <module>myball = Ball("red", "small", "down")
TypeError: this constructor takes no arguments`

(3) 神奇的__str__( )

键入:

class Ball:def __init__(self, color,size,direction):self.color = colorself.size = sizeself.direction = directionmyball = Ball("red", "small", "down")
print myball


而加入__str__( )后:

class Ball:def __init__(self, color,size,direction):self.color = colorself.size = sizeself.direction = directiondef __str__(self):msg = "Hi, I'm a " + self.size + " " + self.color  + " ball!"return msgmyball = Ball("red", "small", "down")
print myball


它的功能是:告诉Python打印一个对象时具体显示什么内容。

四 一个实例类——HotDog

首先为热狗指定一些属性和方法。

下面是热狗的属性

  • cooked_level:这是一个数字。0-3表示还是生的,超过3表示半生不熟,超过5表示已经烤好,超过8表示已经烤糊。热狗刚开始都是生的。
  • cooked_string:这是一个字符串。描述热狗的生熟程度。
  • ingredients:这是配料,比如番茄酱、芥末酱等。

下面是热狗的方法

  • cook( ):把热狗烤一段时间。这会让热狗越来越熟。
  • add_ingredients( ):给热狗加一些配料。
  • __ init__( ):创建实例并设置默认属性。
  • __ str__( ):让print的结果看起来更好一些。

(1) 定义类 初始化

首先,需要定义类。再定义__init__( )方法:

class HotDog:def __init__(self):self.cooked_level = 0self.cooked_string = "Raw"self.ingredients = []

先从一个没有加任何配料的生热狗开始。

(2) 建立方法

现在,建立一个方法烤热狗:

    def cook(self, time):self.cooked_level = self.cooked_level + time #按时间量增加烤制级别if self.cooked_level > 8:self.cooked_string = "Over-toasting"elif self.cooked_level > 5:self.cooked_string = "Well-down"elif self.cooked_level > 3:self.cookede_string = "Medium"else:self.cooked_level = "Raw"

(3) 测试

① 继续下面工作之前,先对这一部分做个测试。需要创建热狗的一个实例,还要检查它的属性:

myDog = HotDog()
print myDog.cooked_level
print myDog.cooked_string
print myDog.ingredients

把上边那些内容放在一起,运行:

class HotDog:def __init__(self):self.cooked_level = 0self.cooked_string = "Raw"self.ingredients = []def cook(self, time):self.cooked_level = self.cooked_level + time #按时间量增加烤制级别if self.cooked_level > 8:self.cooked_string = "Over-toasting"elif self.cooked_level > 5:self.cooked_string = "Well-down"elif self.cooked_level > 3:self.cookede_string = "Medium"else:self.cooked_level = "Raw"myDog = HotDog()
print myDog.cooked_level
print myDog.cooked_string
print myDog.ingredients


② 现在测试cook( )方法,再增加下边的代码:

print "Now I'm going to cook the hot dog."
level = int(raw_input("Enter the cooked_level:"))
myDog.cook(level)
print
print myDog.cooked_level
print myDog.cooked_string

运行这个程序,结果为:

(4) 增加配料和__str__( )的使用

class HotDog:def __init__(self):self.cooked_level = 0self.cooked_string = "Raw"self.ingredients = []def __str__(self):      #定义新的__str__()方法msg = "hot dog"if len(self.ingredients) > 0:msg = msg + "with"for i in self.ingredients:msg = msg + i + ","msg = msg.strip(",")msg = self.cooked_string + " " + msg + "."return msgdef cook(self, time):self.cooked_level = self.cooked_level + time if self.cooked_level > 8:self.cooked_string = "Over-toasting"elif self.cooked_level > 5:self.cooked_string = "Well-down"elif self.cooked_level > 3:self.cookede_string = "Medium"else:self.cooked_level = "Raw"def add_ingredients(self, ingredients):  #定义新的addingredients()方法self.ingredients.append(ingredients)myDog = HotDog()print myDog
print "Cooking hot dog for 4 minutes..."
myDog.cook(4)
printprint myDog
print "Cooking hot dog for 3 minutes..."
myDog.cook(3)
printprint myDog
print "Cooking hot dog for 10 minutes..."
myDog.cook(10)
print myDog
printprint "Now,I'm going to add some ingredients on my hot dog"
myDog.addingredients("ketchup")
myDog.addingredients("mustard")
print myDog

五 多态和继承

对象最为重要的两个方面:多态和继承。

(1) 多态

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

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

class Triangle:def __init__(self,width,height):self.width = widthself.height = heightdef getArea(self):area = self.width * self.height /2.0return areaclass Square:def __init__(self,size):self.size = sizedef getArea(self):area = self.size * self.sizereturn area

Triangle和Square类都有一个名为getArea( )的方法。在交互模式键入:

>>> myTriangle = Triangle(4,5)
>>> mySquare = Square(7)
>>> myTriangle.getArea()
10.0
>>> mySquare.getArea()
49
>>>

这两个图形都使用了方法名getArea( ),不过每个形状中这个方法做的工作不同,这就是多态的一个例子。

(2) 继承

向父母学习
在面向对象的编程中,类可以从其他类继承属性和方法。从其他类继承属性或方法的类称为派生类或子类。

假如我们想建立一个游戏,玩家一路上可捡起不同的东西,比如食物、钱、或衣服。可以建一个类,名为GameObject。GameObject类有name等属性(例如coin、apple、或hat)和pickUp( )等方法。所有游戏对象都有这些共同的方法和属性。

然后,可以为硬币建立一个子类。Coin类从GameObject派生。它要继承GameObject的属性和方法,所以Coin类会自动有一个name属性和pickUp( )方法。Coin类还需要一个value属性和一个spend( )方法。
具体代码:

class GameObject:def __init__(self,player):self.name = namedef pickUp(self,player):# 在这里添加代码将对象添加到玩家的集合中class Coin(GameObject):def __init__(self,value):GameObject.__init__(self)self.value = valuedef spend(self,buyer,seller):# 把代码放在这里,从买家的钱中取出硬币,然后把钱加到卖方的钱上。

在上边的例子中,并没有在方法中加入任何实际代码。只用注释来解释这些方法要做什么,这一种很好的未雨绸缪的办法,“空”函数或方法称为代码桩。

如果运行上边的代码,会出现错误消息,因为函数定义不能为空。因此可以使用Python的关键字pass作为一个占位符:

class GameObject:def __init__(self,player):self.name = namedef pickUp(self,player):pass# 在这里添加代码将对象添加到玩家的集合中class Coin(GameObject):def __init__(self,value):GameObject.__init__(self)self.value = valuedef spend(self,buyer,seller):pass# 把代码放在这里,从买家的钱中取出硬币,然后把钱加到卖方的钱上。

做几个练习

戳这里

Python——对象相关推荐

  1. python将一个json字典转换为一个python对象

    python将一个json字典转换为一个python对象 示例代码: from collections import OrderedDict import jsondata = '{"nam ...

  2. python numpy 数据类型为python对象-python numPy模块 与numpy里的数据类型、数据类型对象dtype...

    学习链接:http://www.runoob.com/numpy/numpy-tutorial.html 简介: numPy是python语言的一个扩展库,是一个运行非常快的数学库,主要用于数组计算. ...

  3. Python pickle模块:实现Python对象的持久化存储

    Python 中有个序列化过程叫作 pickle,它能够实现任意对象与文本之间的相互转化,也可以实现任意对象与二进制之间的相互转化.也就是说,pickle 可以实现 Python 对象的存储及恢复. ...

  4. Python3中的json对象与python对象转化

    1.直接将Python对象转成json对象,使用方法dumps() import jsond = {"姓名": "curry", "age" ...

  5. 独家|测量、建议、快速上手!你所使用的Python对象占用了多少内存?(附代码)...

    作者:Gigi Sayfan 翻译:吴振东 校对:吴金笛 本文约3300字,建议阅读10分钟. 本文将介绍多种Python对象分别所占用的内存,并解释所选择的测量方法和函数,为节省内存提供建议. Py ...

  6. python 对象类型有哪些?

    python 强大的内置类型让我接触到python的时候开始慢慢的喜欢上它了,感觉既方便又好用,下面我们先一起学习下内置对象类型的好处: 1内置对象能够使得我们编写程序更容易. 2内置的对象效率更高, ...

  7. python对象一定要删除引用吗_在Python中删除一个对象和所有对它的引用?

    如果我理解正确,你将包装一些C代码,并且C代码有一个可以被调用的析构函数.之后,任何使用指向C代码对象的指针的尝试都会导致致命的崩溃. 我不确定你的具体情况,所以我将给你两个替代答案. 0)如果C对象 ...

  8. python在读写文件之前需要创建文件对象-Python对象序列化写入文件对象

    1.创建Python文件对象的读写模式(r,w模式)与创建Java输入输出流: FileInputStream inputStream=new FileInputStream(new File(&qu ...

  9. Python学习笔记《Python核心编程》第4章Python对象

    所有的python对象都拥有三个特性:身份,类型和值 身份:每个对象都有一个唯一的身份标识自己,可以使用内建函数id()来得到,这个值被认为是该对象的内存地址:--只读 类型:对象的类型决定了该对象可 ...

  10. python判断文件是否为空文件对象_判断Python对象是不是为文件对象的方法有哪些...

    判断Python对象是不是为文件对象的方法有哪些 发布时间:2020-08-13 14:01:00 来源:亿速云 阅读:76 作者:小新 这篇文章主要介绍判断Python对象是不是为文件对象的方法有哪 ...

最新文章

  1. Java虚拟机中获得Runtime实例的方法是什么?
  2. android service是单例么,android 使用单例还是service?
  3. Cassandra学习手册之一:Cassandra介绍
  4. hive相对于oracle的优点,【Hive】Hive面试题
  5. Python3 环境搭建、pycharm安装配置详解、新建Python项目(新手小白版Windows系统)
  6. ubuntu14.04下通过.frm, .MYD,.MYI文件恢复建立mysql数据库
  7. php图片添加角标,分享一段html在消息按钮上增加数量角标的实现代码
  8. 海康威视Web端视频开发
  9. 一年中什么时候申请房贷最容易下款?
  10. 【软件开发底层知识修炼】十九 GDB调试从入门到熟练掌握超级详细实战教程学习目录
  11. 清北学堂模拟赛d1t5 拍照(photo)
  12. 使用 Laravel 5.5+ 更好的来实现 404 响应
  13. win11还原win10磁贴方法ExplorerPatcher,替代Start 11、StartALLBack(开源免费~)
  14. 无人驾驶综述:等级划分
  15. 搜索引擎查找计算机硬盘信息,win7系统使用搜索引擎快速查找磁盘文件的方法【图文教程】...
  16. H5页面调用扫一扫功能
  17. 前端接收java后端返回base64二进制流下载mp4
  18. 赛门铁克通配符SSL证书,一张通配型证书实现全站加密
  19. [二进制学习笔记]Ubuntu20.04关闭开启ASLR
  20. zoj3598----球面三角形内角

热门文章

  1. OICQ登录号码清除器实现原理
  2. JSP九大内置对象的作用和用法
  3. 使用Jep在Java中执行Python代码
  4. 学画画怎么画三点透视图
  5. talib python文档_GitHub - HuaRongSAO/talib-document: talib学习 talib中文翻译 talib中文文档...
  6. 三种短链接生成源码-iApp源码
  7. Flutter IM 极光
  8. SQL Server 2008 R2安装教程
  9. 百度免费ocr和阿里付费的使用方法
  10. 【第68期】智能时代下的计算机系统能力培养