当前位置: 首页 > 面试题库 >

Python:为什么__dict__属性不在内置类实例中

陈泰宁
2023-03-14
问题内容

如果我对Python数据模型的理解是正确的,则类和类实例都具有__dict__包含所有属性的关联对象。但是,对于某些类实例(例如的实例)为什么str没有__dict__属性,我有些困惑。

如果我创建一个自定义类:

class Foo:
     def __init__(self):
             self.firstname = "John"
             self.lastname = "Smith"

然后,我可以说出实例变量:

>>> f = Foo()
>>> print(f.__dict__)
{'lastname': 'Smith', 'firstname': 'John'}

但是,如果我尝试对内置实例执行相同操作,则会str得到:

>>> s = "abc"
>>> print(s.__dict__)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute '__dict__'

那么,为什么的实例str没有__dict__属性?


问题答案:

默认情况下,在C中定义的类型的实例不具有__dict__属性。



 类似资料:
  • 问题内容: 在Python中,为类实例创建的字典与包含该类相同属性的字典相比很小: 使用Python 3.5.2时,以下调用产生: 节省了字节! 另一方面,使用Python 2.7.12,则返回相同的调用: 已保存字节。 在这两种情况下,字典显然具有 完全相同的内容 : 所以这不是一个因素。此外,这也仅适用于Python 3。 那么,这是怎么回事?为什么在Python 3中实例的大小如此之小? 问

  • 主要内容:类变量(类属性),实例变量(实例属性),局部变量无论是类属性还是类方法,都无法像普通变量或者函数那样,在类的外部直接使用它们。我们可以将类看做一个独立的空间,则类属性其实就是在类体中定义的变量,类方法是在类体中定义的函数。 前面章节提到过,在类体中,根据变量定义的位置不同,以及定义的方式不同,类属性又可细分为以下 3 种类型: 类体中、所有函数之外:此范围定义的变量,称为类属性或类变量; 类体中,所有函数内部:以“self.变量名”的方式定义的

  • 问题内容: 我是python的新手,了解到类属性就像C ++中的静态数据成员一样。但是,尝试以下代码后,我感到困惑: f2.a是否也等于5? 如果将a定义为列表而不是整数,则预期行为: 我研究了 Python:类和实例属性之间的区别,但是它不能回答我的问题。 谁能解释为什么会有所不同?谢谢 问题答案: 在第二个示例中,您没有做相同的事情。在第一个示例中,您要分配一个新值: 在第二个示例中,您只是在

  • 上面的代码准备好了两个类,请看表演 接着来

  • 下表列出了 4 个常见的明星人物: 姓名 年龄 周润发 58 成龙 55 刘德华 53 周星驰 54 进行归纳总结: 这些人物具有较高的知名度,把这些人物归类为明星; 每个明星两个属性:姓名和年龄。明星这个群体具有一个属性:数量,在这张表格中,明星的数量是 4; 姓名和年龄等属性是用于描述具体的一个对象(例如:周润发),而人物的数量是用于描述明星这个类别。 如果使用面向对象技术对以上实体进行描述,

  • 我有以上代码,为什么修改类属性影响实例属性?有人会说这是由于实例共享类属性,根据mro属性解析顺序是如此,但是这是在实例命名空间没有要搜索的属性时才会访问类的命名空间,在我的代码中,实例(shili)有自己的name属性,但为什么还是共享类属性呢?或者说这是其他什么问题,求大佬解答