您说得对,使用**kwargs更新类的速度几乎比手动设置每个变量慢了一倍。但是,两个单独的类对象互相覆盖不应该有任何问题。参考文献:
import timeit
class A:
def __init__(self, **kwargs):
self.__dict__.update(kwargs)
class B:
def __init__(self, **kwargs):
for k, v in kwargs.items():
setattr(self, k, v)
class C:
def __init__(self, name, age):
self.name = name
self.age = age
def initialize_class_a():
a = A(name="J Smith", age=20)
b = A(name="B Jones", age=40)
return a.name, b.name
def initialise_class_b():
a = B(name="J Smith", age=20)
b = B(name="B Jones", age=40)
return a.name, b.name
def initialise_class_c():
a = C(name="J Smith", age=20)
b = C(name="B Jones", age=40)
return a.name, b.name
print(initialize_class_a())
print(initialise_class_b())
print(initialise_class_c())
print(timeit.timeit("initialize_class_a()", "from __main__ import initialize_class_a"))
print(timeit.timeit("initialise_class_b()", "from __main__ import initialise_class_b"))
print(timeit.timeit("initialise_class_c()", "from __main__ import initialise_class_c"))
请注意,在每次运行中,两个独立的类对象a.name和b.name的名称仍然不同。