A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

学习了一天的python,想对python中的类-class,对象,方法,属性等概念做个简单的总结。


What Is an Object?

Objects are key to understanding object-oriented technology. Look around right now and you'll find many examples of real-world objects: your dog, your desk, your television set, your bicycle.

对象的概念在面向对象编程的技术中非常关键。观察周围的环境,你会发现很多现实世界中的例子:你的狗,你的桌子,你的电视,你的自行车

引自:http://docs.oracle.com/javase/tutorial/java/concepts/object.html

现实世界中的对象共享2个特点:状态和行为

比如狗的状态(名字,颜色,品种,饥饿),行为(狗吠,摇尾巴)

自行车也有状态(现在的传动装置,现在的脚踏板的节奏,现在的速度),行为(刹闸,改变脚踏板的行为)

去识别现实世界中的对象的状态和行为能够帮助我们非常好的理解面向对象编程的思想

现在花一点时间去观察现实世界中的对象。对于你看到的每一个对象,都要问自己2个问题:“这个对象可能处在什么样的状态”,他能执行什么可能的行为。

如果你这么做了,你就会注意到现实世界中的对象可能会有所不同,你桌子上的台灯可能只有2个可能的状态(开和关),2个可能的行为(打开和关闭)

但是你桌子上面的收音机可能会有额外的状态和行为,状态(开,关,现在的音量,现在的电台),行为(打开,关闭,调大音量,降低音量,搜索,浏览,tune)

这些真实世界中的观察结果都被传送到面向对象编程的程序中。





软件中的“object”和真实世界中的对象的概念非常相似:他们也是由state和related behavior组成。

一个对象在field(变量)中存储他的state,之后通过他的方法methods(functions)来暴露出他的行为。方法操作内部的状态,充当object-to-object 交流的首选机制

通过对象的方法,隐藏了内部的状态和执行了相关的操作,这就是传说中的数据封装--------- 一个面向对象的基本原理

Consider a bike, 比如


A bicycle modeled as a software object.



通过归因于state(现在的速度,现在的脚踏节奏)和提供改变状态的方法,对象仍旧受控于外部世界怎样使用它。

比如,如果这个自行车有6个齿轮,如果输入的值小于1或者大于6,一个改变齿轮的方法可能被拒绝。


把代码打包到单个对象中,提供了很多好处,包括:

  • 模块化:对象的source code可以单独的写和维护。一旦创建,一个对象可以轻易地传送到系统内部
  • 信息隐蔽:只对一个对象交互的方法,其内部实现的细节仍然隐藏与外界的联系
  • 代码重用:如果一个对象已经存在(或许是被另外一个developer写的),你可以使用那个对象在你的程序中。这允许专家实现/测试/调试复杂,特定于任务的对象,你可以相信在您自己的代码中运行。
  • 可插入性和调试方便:如果一个指定的对象被证明有问题,你可以很容易的从你的程序中移除他,并且plug一个不同的对象去替换他。这和现实世界中修理机制非常类似,如果一个部件坏了,你不需要去更换整部机器

所以什么是对象呢,在python中一切都可以是对象,只要你指明他可能出现的状态,和操控状态的方法

Python 中的对象是 C 语言中结构体在堆上申请的一片内存区域。


What Is a Class?

In the real world, you'll often find many individual objects all of the same kind. There may be thousands of other bicycles in existence, all of the same make and model. Each bicycle was built from the same set of blueprints and therefore contains the same components. In object-oriented terms, we say that your bicycle is an instance of theclass of objects known as bicycles. A class is the blueprint from which individual objects are created.

The following Bicycle class is one possible implementation of a bicycle:

在现实世界中,你通常情况下会需要去寻找很多单独的对象但是他们的种类确是相同的。 现在可能有成千上万的自行车存在,all of the same make and model.
每一个自行车都是用同一个蓝图来制作的,因此都含有相同的属性。在面向对象的terms中,we say that 你的自行车是一个对象的类的instance。

这个mode 简化为   自行车(对象)---蓝图(类)---你的自行车。


下文参考此链接:http://blog.chinaunix.net/uid-15174104-id-3826306.html


言归正传,今天我们要了解的是Python的中对象(Objects)。Python的官方文档是这样描述Python中的对象的。
Objects are Python’s abstraction for data. All data in a Python program is representedby objects
or by relations between objects.

python中的对象是对数据的描述。python程序中的所有data都可以代表对象(所以我觉得是不是此时

Python把所有的一切都认为是对象(Objects),  这就是那句著名的话 "Everything is an object in Python"。实际上,
对象(Objects)是Python对于数据的一种抽象。在Python程序中,所有的数据都是通过对象或者对象之间的关系
来表示的。 Python中的对象有由三个部分组成: 标示(identity),类型(type)和值(value)。

标示(identity)

每一个对象都是唯一的。我们可以用对象的标示(identity)来比较两个对象,即使用 is语句。我们可以把对象的标
示(identity)看做是对象在内存中的地址。当一个对象一旦被创建,它的标示(identity)将不再改变直到这个对象
消失。当对象消失后,它的标示(identity)将会被释放,并可能被未来的一个对象来使用。所以,对象的标示是唯一
的,不变的,并存在于对象的整个生命周期。为了更形象的说明什么是对象的标示(identity),我们可以用Python中
内建函数id()来返回一个对象的标示(identity)。

说的直白些,对象的标示(identity)其实就是一个整数,它是对象在内存中的地址。


  • 类型(type)

对象的类型(type)则决定了对象支持什么样的操作和运算,可以被赋予什么样的值。 内建函数type()返回的
是当前所给对象的类型。同对象的标示(identity)一样,类型(type)也是不可变的【1】


  • 值(value)
对象的是值本身也是一个对象,且它和对象有同样的的类型(type)。有些对象的值是可变的,有些对象的值
是不可变的。我们把那些值可以变化的对象叫做可变对象(mutable objects),把那些值不可变的对象叫做不
变对象(immutable objects)。一个对象的易变性(mutability)
是由这个对象的类型(type)来决定的。
比如,数字(numbers),字符串(strings),元组(tuples)是不可变的,而字典(dictionaries),列表(lists )
是可变的。

对象从来不会显示地消失,如果某个对象不再被使用后,它们会在垃圾回收后变的不可以用。
至此,我们已经对Python对象有了基本的了解。下次,我们将深入讲解Python对象的一些特性。敬请期待!





2 个回复

倒序浏览
回复 使用道具 举报
奈斯
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马