You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何以更Pythonic的方式在Cisco APIC租户类的字典中添加值?

简化Cisco APIC Tenant类的字典初始化代码

当然有更Pythonic的写法!我们可以通过减少冗余拼接、合并重复逻辑来让代码更简洁,同时保持可读性。下面分几种场景给出优化方案:

场景1:不需要单独访问dn和rn实例变量

如果你的后续代码不需要单独调用self.dn或self.rn,完全可以直接在payload的字典里生成这些值,省去单独定义实例变量的步骤:

class Tenant:
    def __init__(self, apic, tenant_name, descr):
        self.apic = apic
        self.tenant_name = tenant_name
        self.descr = descr
        self.payload = {
            "fvTenant": {
                "attributes": {
                    "descr": descr,
                    "dn": f'uni/tn-{tenant_name}',
                    "name": tenant_name,
                    "rn": f'tn-{tenant_name}'
                }
            }
        }

这里用Python的f-string直接拼接字符串,而且直接使用方法参数descr和tenant_name,不用额外通过self.调用,代码更紧凑。

场景2:需要保留dn和rn实例变量

如果后续逻辑需要用到这两个变量,我们可以用赋值解包来一行生成它们,避免重复拼接tenant_name:

class Tenant:
    def __init__(self, apic, tenant_name, descr):
        self.apic = apic
        self.tenant_name = tenant_name
        self.descr = descr
        # 一行生成rn和dn,避免重复拼接
        self.rn = f'tn-{tenant_name}'
        self.dn = f'uni/{self.rn}'
        self.payload = {
            "fvTenant": {
                "attributes": {
                    "descr": descr,
                    "dn": self.dn,
                    "name": tenant_name,
                    "rn": self.rn
                }
            }
        }

如果用Python 3.8+,还可以用赋值表达式进一步压缩成一行:

self.rn, self.dn = f'tn-{tenant_name}', f'uni/{self.rn}'

场景3:追求极致DRY(避免重复代码)

如果tn-{tenant_name}这个字符串在其他地方也会用到,我们可以把它存为临时变量,彻底消除重复:

class Tenant:
    def __init__(self, apic, tenant_name, descr):
        self.apic = apic
        self.tenant_name = tenant_name
        self.descr = descr
        tn_identifier = f'tn-{tenant_name}'
        self.dn = f'uni/{tn_identifier}'
        self.rn = tn_identifier
        self.payload = {
            "fvTenant": {
                "attributes": {
                    "descr": descr,
                    "dn": self.dn,
                    "name": tenant_name,
                    "rn": self.rn
                }
            }
        }

这些方案都比原来的代码更简洁,同时符合Python的简洁性原则,可读性也更强。

内容的提问来源于stack exchange,提问作者Dave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 16:17:41