首页 > 解决方案 > 我可以在 python 的循环中调用 super 吗?

问题描述

我怎样才能使下面的代码工作,如果不可能,有什么更好的方法来做这个特定的事情?我似乎无法弄清楚,因为我相信我不应该创建父对象。只写 super() 似乎对我不起作用(3.6.5)。

class Geometry(object):
    def __init__(self, **kwargs):
        if kwargs:
            allowed = ['lat', 'lng', ]
            for k,v in kwargs.items():
                if k in allowed:
                    setattr(self, k, v)

class Address(Geometry):
    def __init__(self, d = None):
        if d:
            for k,v in d.items():
                if k in Geometry:
                    setattr(super, k, v)
                if k in Allowed('Address'):
                    setattr(self, k, v)

我正在尝试将值推送到父类,但在属性名称位于允许的列表之前不知道它们。

我知道 Geometry 目前不支持成员资格测试,因为没有定义任何内容。

Geometry类具有 lat、lng、name 等属性。Allowed帮助类将返回一个字符串列表,该列表表示 Address 类的允许键。

标签: pythonsuper

解决方案


我确定您super以错误的方式使用。

您应该首先初始化超类:

class Geometry(object):
    def __init__(self, **kwargs):
        if kwargs:
            allowed = ['lat', 'lng', ]
            for k,v in kwargs.items():
                if k in allowed:
                    setattr(self, k, v)

class Address(Geometry):
    def __init__(self, **d = None):
        super().__init__(d)
        if d:
            for k,v in d.items():
                if k in Allowed('Address'):
                    setattr(self, k, v)

通过这种方式,超类自行整理。

你的Address类可以对自己的属性进行排序。(帮助Allowed)。

我假设d参数是一个字典,就像kwargs.

你使用的方式super对我来说意味着你应该使用self. (除了那k in Geometry并不意味着什么)


推荐阅读