Person.__dict__输出像字典但实际是mappingproxy,
难道python所有的对象print后都是字典形式
在 Python 中,并非所有对象的 print 输出都是字典形式,但许多对象的 print 输出确实会以类似字典的结构展示,这取决于对象的 repr 或 str 方法的实现方式。
Person.dict 输出类似字典,是因为 mappingproxy 类型的 repr 方法被设计成返回字典风格的字符串表示,方便开发者查看类属性。
class Person:
species = "Human"
print(Person.dict) # 输出类似字典,但实际是 mappingproxy
print(type(Person.dict)) # <class 'mappingproxy'>
=输出结果===
{
'module': 'main',
'species': 'Human',
'dict': <attribute 'dict' of 'Person' objects>,
'weakref': <attribute 'weakref' of 'Person' objects>,
'doc': None
}
虽然输出看起来像字典,但 Person.dict 本身是 mappingproxy,不能直接修改
不是所有对象的 print 都像字典
Python 对象的 print 行为由 repr 或 str 决定,不同对象有不同的输出风格:
(1) 普通对象(无 dict)
python
x = 123
print(x) # 123(整数,不是字典形式)
s = "hello"
print(s) # hello(字符串,不是字典形式)
(2) 自定义类的实例
python
class Dog:
def init(self, name):
self.name = name
d = Dog("Buddy")
print(d) # <main.Dog object at 0x7f8c1a2b3d90>(默认输出内存地址)
如果想让它输出字典形式,可以自定义 repr:
python
class Dog:
def init(self, name):
self.name = name
def __repr__(self):
return str(self.__dict__) # 强制输出字典形式
d = Dog("Buddy")
print(d) # {'name': 'Buddy'}(现在像字典)
(3) 特殊对象(如 NumPy 数组、Pandas DataFrame)
python
import numpy as np
arr = np.array([1, 2, 3])
print(arr) # [1 2 3](不是字典形式)
import pandas as pd
df = pd.DataFrame({"A": [1, 2], "B": [3, 总结
Person.dict 输出像字典,但实际是 mappingproxy(只读字典视图)。
不是所有 Python 对象的 print 都像字典,只有部分对象(如 dict、自定义 repr 的类)会这样。
基本类型(int, str)、容器(list, dict)、第三方库对象(numpy.ndarray)通常不以字典形式输出。
如果想自定义 print 行为,可以重写 repr 或 str。4]})
print(df) # 输出表格形式,不是字典