【问题标题】:python class object definitionpython类对象定义
【发布时间】:2015-10-08 07:18:14
【问题描述】:

我有一个关于 Python Object 类的问题。据我了解,所有类都基于 Object 类。我找不到对象的类定义:

class Object:
    code for methods and attributes.

如果我使用 dir(object),我会得到:

dir(object)

['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']

这些方法是否有代码,或者无法访问?我正在和 O'Reilly 一起学习 Python,课程的一部分是在论坛上提问并记录答案。我相信我已经满足了您的所有要求。我已经在互联网上搜索了几个小时和你的网站。我也查了几本书。我什至找不到正在讨论的主题。我对 Python 和面向对象编程比较陌生,所以也许我遗漏了一些东西。也许不需要知道这一点来解决问题,但我很惊讶我找不到任何关于这个主题的 cmets。

【问题讨论】:

  • 我不确定课程要求您在此处发布问题的想法。这有点厚脸皮,真的:我不介意帮助那些确实有编程问题的人,但是让你想出一个随机问题只是为了在这里发帖似乎有点过分。
  • 无论如何我都会问他们这个问题。当我看到它作为项目的一部分时,我想我会把它贴在这里。我喜欢了解代码背后的基本原理。它让我更容易思考它是如何工作的。我读过的大部分内容都说所有类都继承自 Object,但仅此而已。我只是想了解更多关于 Object 的信息。可能没有必要创建代码,但它似乎是某个地方会涵盖的基本主题。只要我知道它们是如何工作的,我不介意考虑诸如“黑匣子”之类的东西。

标签: python class object declaration definition


【解决方案1】:

这些是object 类型的内部方法。根据文档

object 是所有类的基础。它具有所有 Python 类实例通用的方法。

这些通常在运行时实现,例如对于 CPython 解释器(默认实现),您可以在 https://github.com/python/cpython/blob/master/Objects/object.c 找到代码。

您还可以查看https://github.com/python/cpython/blob/7862ded73723e4573ed5d13488c07b41ac31a07e/Objects/typeobject.c#L4357,您可以在其中找到object 的内部定义方式以及各种方法指向的位置。同样,这些是 cpython 的内部和特定的,但会给你一个公平的观点来了解幕后发生的事情。

您当然可以覆盖其中的大部分来自定义您的类的行为。

【讨论】:

  • 谢谢,我查看了您建议的代码。它没有列出我使用 dir(object) 时得到的所有内容。我想知道这是从哪里来的,他们默认做了什么。
  • @JoeBigler CPython 数据模型实现(以及与对象有关的所有内容)可以在github.com/python/cpython/tree/master/Objects 找到。你有什么特别好奇的方法吗?
  • "class" 和 "init" 是两个。他们在基层做什么?它们应该在每个之前和之后有两个下划线,但显示会隐藏它们。
  • Init 是类实例的初始化器。 class 属性涉及更多。它是指向类实例的指针,在 cpython 的情况下设置为github.com/python/cpython/blob/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多