[英]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.