Python 使用现有id创建新对象

Python 使用现有id创建新对象,python,sqlalchemy,Python,Sqlalchemy,我使用SQLAlchemy定义一个用户类 如果用户未登录我的网站,我想将其标识为匿名用户。我希望我的AnonymousUser是我的普通User类的一个子类,使用特殊的方法(例如is\u anonymous(self):return true) 现在,有一个我最初在数据库中创建的匿名用户,(比如)id=0 我想将AnonymousUser定义为User的子类,其中构造函数只返回匿名用户: class AnonymousUser(User): def __init__(self):

我使用SQLAlchemy定义一个
用户

如果用户未登录我的网站,我想将其标识为
匿名用户
。我希望我的
AnonymousUser
是我的普通
User
类的一个子类,使用特殊的方法(例如
is\u anonymous(self):return true

现在,有一个我最初在数据库中创建的匿名用户,(比如)id=0

我想将
AnonymousUser
定义为
User
的子类,其中构造函数只返回匿名用户:

class AnonymousUser(User):
    def __init__(self):
        anonymous_user = User.get_by_id(0)
        self.username = anonymous_user.username
        self.id = anonymous_user.id
        ...
但是,当我创建一个
匿名用户
时,它并不理解我不想要一个新的
用户
,而只是创建一个现有的
用户
,它将创建一个新的
用户
提交给会话,由于
id
已设置为现有的匿名用户
id
,因此由于id唯一性条件,它会崩溃

如何告诉SQLAlchemy使用现有id创建
User
对象

有没有更优雅的方式来做我想做的事


我知道我可以通过使用
user.get\u by\u id(0)
简单地定义一个匿名用户,但是我必须在我的对象中添加一个
is\u anonymous
字段,并在每次检查我的用户是否匿名时进行变量检查(与有两个不同的类不同,一个实现非常简单
is_anonymous:return False
,另一个使用
is_anonymous:return True
快速建议。您可以在用户类上实现is_anonymous方法,如下所示:

def is_anonymous(self):
    return self.id == 0

一个快速建议。您可以在用户类上实现is_匿名方法,如下所示:

def is_anonymous(self):
    return self.id == 0