所有栏目

字典对象值列表的返回方法

已输入 0 字
优质回答
  • 一. 方便但不完美的__dict__

    对象转字典用到的方法为__dict__. 比如对象对象a的属性a.name='wk', a.age=18, 那么如果直接将使用a.__dict__获得对应的字典的值为: {name: 'wk', aget:18}, 很方便, 但是也存在一些限制. 其不完美之处在于:

    比如:

    class A(object):

    name = 'wukt'

    age = 18

    def __init__(self):

    self.gender = 'male'

    a = A()

    print(a.__dict__)

    此时的打印结果是:

    {gender: 'male'}

    但是类变量name和age无法一同转换.

    二. 使用dict

    使用dict的方式如下, 如果直接使用会报错.

    a = A()

    dict(a)

    使用dict之时, 将自动调用类中的keys方法, keys中定义了字典的键, 调用keys方法后, 程序将依照字典取值的方式尝试获得这些键对应的值.

    当使用如字典的取值方式时: 比如a['name'], 将会调用类中的__getitem__方法, __getitem__方法决定了这个值是多少.

    因此只需要在一例中添加两个方法就可以使对象可以通过dict转字典:

    def keys(self):

    return ('name', 'age' )

    def __getitem__(self, item):

    return getattr(self, item)

    通过这种方式, 既可以支持类变量的转换, 又可以自定义需要转换的字段.

    完整代码:

    class A(object):

    name = 'wukt'

    age = 18

    def __init__(self):

    self.gender = 'male'

    def keys(self):

    '''当对实例化对象使用dict(obj)的时候, 会调用这个方法,这里定义了字典的键, 其对应的值将以obj['name']的形式取,

    但是对象是不可以以这种方式取值的, 为了支持这种取值, 可以为类增加一个方法'''

    return ('name', 'age', 'gender')

    def __getitem__(self, item):

    '''内置方法, 当使用obj['name']的形式的时候, 将调用这个方法, 这里返回的结果就是值'''

    return getattr(self, item)

    a = A()

    r = dict(a)

    print(r)

    2023-10-24 18:01:36
最新问题 全部问题