如何动态访问python类属性? [重复]

问题描述 投票:2回答:1

这个问题在这里已有答案:

我正在尝试为python构建一个User模型。我必须使用SQL_Alchemy ORM将值插入数据库。为此,我定义了一个类User,它具有id,first_name,second_name,last_name,email etc属性。该类继承db.Model,并相应地映射attirbutes和coloumns。该课程的实施如下:

class Users(db.Model):
    __tablename__ = 'users'
    id = db.Coloumn('id',db.Integer,primary_key=True)
    first_name = db.Coloumn('first_name',db.String)
    second_name = db.Coloumn('second_name',db.String)
    last_name = db.Coloumn('last_name',db.String)
    email = db.Coloumn('email',db.String)
    password = db.Coloumn('password',db.String)

我想实现一个方法名称insert(),它将值作为参数并动态地映射到类属性。

现在我已经通过以下方式实现了它:

    def insert(self,first_name,second_name,last_name,email,password):
        self.first_name = first_name
        self.second_name = second_name
        self.last_name = last_name
        self.email = email
        self.password = password

我想以这样的方式实现该方法,即将字典值作为kwargument并相应地将其映射到类属性。

例如,该方法应声明为insert(self,**kwargs):

python sqlalchemy
1个回答
3
投票

有两种方法。更详细地说:

def insert(self, **kwargs):
    for k, v in kwargs.items():
        setattr(self, k, v)

或者,更简洁:

def insert(self, **kwargs):
    self.__dict__.update(kwargs)

后者不适用于实例没有__dict__的类,比如定义__slots__的类

© www.soinside.com 2019 - 2024. All rights reserved.