简体   繁体   English

更新 Object 的数据成员

[英]Updating data members of an Object

I have been trying to update only those members of an object passed into a function which are truthy but I feel like my approach is bad for updating them.我一直在尝试仅更新传递给 function 的 object 的那些成员,这些成员是真实的,但我觉得我的方法不利于更新它们。

Here's my approach:这是我的方法:

class A:

    def __init__(self, name, age, _id):

        # Data Members

        self.name = name
        self.age = age
        self._id = _id

    def update(self, name=None, age=None, _id=None):

        # These need to be updated if the parameters are truthy

        if name:
            self.name = name
        if age:
            self.age = age
        if _id:
            self._id = _id

It looks okay-ish if the members are less but If more members need to be updated, it becomes a mess.如果成员较少,它看起来还可以,但如果需要更新更多成员,它就会变得一团糟。

How can this approach be improved?如何改进这种方法?

Take the parameters as a dictionary and loop over it.将参数作为字典并循环遍历它。

def update(self, **kwargs):
    for name, val in kwargs.items():
        setattr(self, name, val)

BTW, checking for truthy values is not a good idea if legitimate values can be falsey (eg setting an attribute to 0 ).顺便说一句,如果合法值可能是错误的(例如将属性设置为0 ),则检查真实值并不是一个好主意。 It would be better to use if name is not None: -- this just assumes that None is not a legitimate value. if name is not None: ——这只是假设None不是合法值。

Full code:完整代码:

class A:

    def __init__(self, name, age, _id):

        # Data Members

        self.name = name
        self.age = age

    def update(self, **kwargs):
        for name, val in kwargs.items():
            setattr(self, name, val)

foo = A("Barry", 59, 1234)
foo.update(name = "Joe", age = 10)
print(foo.name)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM