小编fel*_*nho的帖子

Python 3:为什么“对象”是“类型”的实例,而“类型”是“对象”的实例?

编辑: 我不认为这是Python什么是元类的真实副本,即使在长评论的结尾部分回答了我的问题。

链接的问题通常针对元类。我的问题是关于特定的元类的type。而且据我所知,阅读答案后,type无法在纯Python中实现元类。因此,我的问题不仅是关于“什么是元类?”,而且还涉及type/ object关系以及元类如何创建自身,这是通过在实现级别上“作弊”来实现的。

对于不熟悉元类概念的人来说,这两个问题似乎完全无关。


初始帖子:

我对Python 3中的objecttype类有些困惑。也许有人可以消除我的困惑或提供一些其他信息。

我目前的理解:

每个类(除外object)都从称为的基类继承object。但是每个类(包括object)也是该类的type一个实例,它是自身的实例,object并且也从继承object

我的问题:

  • 是否有一个原因/设计决定,为什么object是的实例typetype从中继承objecttype对象的/ class 是否也可以是对象本身?

  • 类(type)如何成为其自身的实例?

  • 哪一个是真正的基类objecttype
    我一直认为object这将是最“基础”的类,但它似乎是的实例type,这是的实例object,是的实例type,...递归在哪里结束?

  • 是否有可能说明objecttype类之间的关系?

我试过的

我查找了Python标准库文档中的object和的条目type …

python oop metaprogramming object python-3.x

11
推荐指数
1
解决办法
497
查看次数

如何在 Linux 上的 Anaconda 中安装 PyGObject?

在我的 Anaconda Python3.7 安装中导入 PyGObject 时,

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

ValueError: Namespace Gtk not available
Run Code Online (Sandbox Code Playgroud)

我从 conda-forge 频道安装了 pygobject 和 gobject-introspection。

当我使用Python的系统安装时,它工作得很好。

gtk pygobject python-3.x anaconda python-3.7

5
推荐指数
1
解决办法
2146
查看次数

为什么 from ... import ... 语句包含隐式导入?

给定一个包:

package/
??? __init__.py
??? module.py
Run Code Online (Sandbox Code Playgroud)

__init__.py:

from .module import function
Run Code Online (Sandbox Code Playgroud)

模块.py:

def function():
    pass
Run Code Online (Sandbox Code Playgroud)

可以导入包并打印其命名空间。

python -c 'import package; print(dir(package))'
Run Code Online (Sandbox Code Playgroud)
['__builtins__', ..., 'function', 'module']

Run Code Online (Sandbox Code Playgroud)

题:

为什么仅在导入时package包含的命名空间?modulefunction__init__.py

我原以为package的命名空间将只包含function而不是module. 文档中也提到了这种机制,

“当使用任何机制(例如 importlib API、import 或 import-from 语句或内置__import__())加载子模块时,将在父模块的命名空间中放置到子模块对象的绑定。”

但并没有真正的动机。对我来说,这个选择似乎很奇怪,因为我认为子模块是结构包的实现细节,并且不希望它们成为 API 的一部分,因为结构可以改变。

我也知道“Python 是为了成年人的同意”,并且不能真正向用户隐藏任何东西。但我会争辩说,将子模块名称绑定到包的范围会使用户不太清楚什么是 API 的实际组成部分以及什么可以更改。

为什么不使用__sub_modules__属性等来使用户可以访问子模块?这个设计决定的原因是什么?

python python-import python-3.x python-packaging

5
推荐指数
1
解决办法
154
查看次数