[英]Returning dictionary representation of object when class attributes are private (Python)
我正在尝试从 Python 中的对象生成字典。 我使用了object.__dict__
,它在类属性未设置为私有时工作。 但是,当我将属性设置为私有时,字典键从'attribute'
更改为'_ClassName__attribute'
我只是想知道是否有一个内置函数可以将属性名称保持为'length'
(举个例子),或者我是否必须做其他事情。
class Rectangle():
def __init__(self,length,breadth):
self.__length = length
self.__breadth = breadth
def get_length(self):
return self.__length
def get_breadth(self):
return self.__breadth
r = Rectangle(2,4)
print(r.__dict__)
输出:
{'_Rectangle__length': 2, '_Rectangle__breadth': 4}
期望输出:
{'length': 2, 'breadth': 4}
编辑:应该注意我的代码比这更复杂,并且由于继承,我的一些字典可能看起来像这样:
{'_Rectangle__length' : 2, '_Circle__radius' : 5, '_Square__height' : 9}
因此,如果没有内置函数可以简单地执行我正在寻找的操作,我可能需要删除所有键,包括__
。 我已经尝试过这个,但是在迭代期间无法更新字典的问题。 任何建议,将不胜感激。
Pythonic 设计将是
class Rectangle:
def __init__(self, length, breadth):
self._length = length
self._breadth = breadth
@property
def length(self):
return self._length
@property
def breadth(self):
return self._breadth
def to_dict(self):
return {'length': self._length, 'breadth': self._breadth}
r = Rectangle(2, 4)
print(r.to_dict())
使用_
前缀名称指示不应直接使用的property
,并使用property
提供对此类属性的只读访问。 定义一个显式生成所需dict
的方法,而不是尝试直接重用__dict__
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.