繁体   English   中英

当类属性为私有时返回对象的字典表示(Python)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM