首页 > 解决方案 > 如何使用减少每个单独元素的多重设置/取消设置功能

问题描述

考虑到我将要分配和取消分配多个值,我如何使此代码更紧凑

class A:
    def __init__(self,*args,**kwargs):
        self._a = 0
        self._b =0
    def set_a(self):
        self._a = 1
    def set_b(self):
        self._b = 1
    def unset_a(self):
        self._a =0
    def unset_b(self):
        self._b = 0

x=A()
x.set_a() 
print(x._a) # 1
x.unset_a()
print(x._a) # 0

我只是想避免编写多个设置和取消设置函数,只是一个简单的 1 函数,我将类型(设置/取消设置)和哪个变量传递给目标,就可以了

标签: pythonpython-decoratorsclass-method

解决方案


我很想使用字典而不是多个变量来执行以下操作:

class A:
    def __init__(self,*args,**kwargs):
        self._d = {'_a': 0, '_b': 0}
    def set_d_item(self, key, val):
        self._d[key] = val

x=A()
x.set_d_item('_a', 1) 
print(x._d['_a']) # 1
x.set_d_item('_a', 0) 
print(x._d['_a']) # 0

如果您确实需要示例中的属性,则可以使用exec(),但我真的不建议允许任意代码执行:

class A:
    def __init__(self,*args,**kwargs):
        self._a = 0
        self._b =0
    def set_item(self, key, val):
        exec(f'self.{key} = {val}')

x=A()
x.set_item('_a', 1) 
print(x._a) # 1
x.set_item('_a', 0) 
print(x._a) # 0

推荐阅读