首页 > 解决方案 > Python 在初始化期间更改实例的属性

问题描述

是否可以在初始化期间更改实例的属性?

E.G 下面的代码。

class Sensor() :
    def __init__(self) :
         self.name = 'pressure' 

Sensor1 = Sensor(name='pH') 

那可能吗?

标签: pythonclass

解决方案


您需要明确声明您接受一个name参数,然后您需要明确更新适当的属性:

class Sensor():
    def __init__(self, name='pressure'):
        self.name = name

请注意,如果消费者不提供参数,我将'pressure'其用作参数的默认值:name

a = Sensor()
print(a.name) # 'pressure'

b = Sensor(name='sensor')
print(b.name) # 'sensor'

name也可以作为位置参数提供:

c = Sensor('some_name')
print(c.name) # 'some_name'

更通用的方法

还有一种更通用的方法(如果用例需要),它涉及动态创建属性:

class Sensor():
     def __init__(self, **kwargs):
         for attr, value in kwargs.items():
             setattr(self, attr, value)

然后您可以执行以下操作:

d = Sensor(name='foo', temperature=70, active=True)
print(d.name)        # 'foo'
print(d.temperature) # 70
print(d.active)      # True

推荐阅读