python - 我可以在 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 类的允许键。
解决方案
我确定您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
并不意味着什么)
推荐阅读
- python - 通过多个空格拆分熊猫数据帧字符串
- sql - 在 SQL 中集中身份表并将所有表与一张表关联
- sas - 将“MM.YYYY”转换为 SAS 日期格式,如 mmyy10
- excel - 如果 Excel 宏中的一行代码太长会导致错误吗?
- ios - 在 Swift 中的 MailJet 电子邮件中附加 PDF
- php - 如何限制mysql中数字的最大值?
- python - 如果布尔结果为真,熊猫返回 CIDR
- python - 这条 ROC 曲线有意义吗?
- python - 如何通过参数解析连续调用python文件
- amazon-web-services - 为通过 UserData 创建 AMI 准备 Windows 2016 EC2 实例