Bry*_*ley 12
对象是面向对象语言的基本构建块。整数、字符串、浮点数,甚至数组和字典,都是对象。更具体地说,任何单个整数或任何单个字符串都是一个对象。数字 12 是一个对象,字符串“hello, world”是一个对象,一个列表是一个可以容纳其他对象的对象,等等。您一直在使用对象,甚至可能没有意识到。
每个对象都有一个类型,该类型定义了您可以对该对象执行的操作。例如,int类型定义了当你向 int 添加一些东西时会发生什么,当你尝试将它转换为字符串时会发生什么,等等。
从概念上讲,如果不是字面意思,类型的另一个词是class。当你定义一个类时,本质上你是在定义你自己的类型。就像12整数"hello world"的实例和字符串的实例一样,您可以创建自己的自定义类型,然后创建该类型的实例。每个实例都是一个对象。
大多数不仅仅是在显示器上打印字符串的程序需要管理的不仅仅是数字和字符串。例如,您可能正在编写一个处理图片的程序,如 photoshop。或者,您可能正在创建 iTunes 的竞争对手并且需要操纵歌曲和歌曲集。或者,您可能正在编写一个程序来管理食谱。
一张图片、一首歌或一个食谱都是特定类型的对象。唯一的区别是,您的对象不是由语言提供的类型(例如:整数、字符串等),而是您自己定义的东西。
要深入,您需要了解Python 数据模型。
但是如果你想要一个有光泽的 stackoverflow 备忘单,让我们从字典开始。(为了避免循环定义,让我们同意至少,字典是键到值的映射。在这种情况下,我们甚至可以说键肯定是字符串。)
def some_method():
return 'hello world'
some_dictionary = {
"a_data_key": "a value",
"a_method_key": some_method,
}
Run Code Online (Sandbox Code Playgroud)
因此,对象就是这样一种映射,带有一些额外的语法糖,允许您使用点表示法访问“键”。
现在,还有很多事情要做。(事实上,如果你想在 python 之外理解这一点,我推荐The Art of the Metaobject Protocol。)你必须跟进“但什么是实例?” 和“你怎么能做像迭代这样的事情字典中的条目?” 和“什么是类型系统”?其中一些在 Skam 的好答案中得到了解决。
我们可以讨论 python dunder方法,以及它们如何基本上是实现本机行为的协议,例如sized(具有长度的事物)、可比较类型(x < y)、可迭代类型等。
但是由于这个问题基本上是博士级别的广泛问题,我想我会非常简化我的答案,看看你是否想限制这个问题。
| 归档时间: |
|
| 查看次数: |
9598 次 |
| 最近记录: |