【问题标题】:How to access python class attributes dynamically? [duplicate]如何动态访问python类属性? [复制]
【发布时间】:2018-09-05 05:29:08
【问题描述】:

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

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(),它以 value 作为参数并将其动态映射到类属性。

目前我已通过以下方式实现它:

    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】:

    有两种方法。更详细:

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

    或者,更简洁:

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

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

    【讨论】:

    • 第一个选项有效。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    • 2013-07-12
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多