大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
我想为给定的SQLAlchemy映射类重写__deepcopy__,以便它忽略任何SQLA属性,但深入复制其他所有类的类.
我并不是特别熟悉覆盖任何Python的内置对象,但我对我想要的东西有所了解.
让我们创建一个使用SQLA映射的非常简单的类User.
class User(object):
def __init__(self, user_id=None, name=None):
self.user_id = user_id
self.name = name
我已经使用dir()来查看映射之前和之后的SQLAlchemy特有的属性,并且我找到了_sa_class_manager和_sa_instance_state.
问题
只要那些是唯一的,在定义__deepcopy__时我会如何忽略它?
此外,SQLA是否有任何属性注入映射对象?
(我在之前的一个问题中问了这个问题(虽然我选择了一个主要问题的答案后几天作为编辑),但我想我错过了那里的火车.为此道歉.)
编辑 – 修复代码感谢zifot的回答
我从Python文档中得到的唯一一件事就是你需要用memo定义deepcopy作为额外的参数.经过几十年的挖掘,我尝试了这个:
def __deepcopy__(self, memo):
dpcpy = self.__class__()
memo[id(self)] = dpcpy
for attr in dir(self):
if not attr.startswith(‘_’):
value = getattr(self, attr)
setattr(dpcpy, attr, copy.deepcopy(value, memo))
return dpcpy
然后我创建了一个User实例:
snake = User(913, ‘Snake,S.’)
之后,我尝试了深度扫描操作:
snake_dc = copy.deepcopy(snake)
…而且snake_dc仍然有SQLA属性……
我愿意提供帮助,建议等等.
最佳答案 mavnn 07000.例如,尝试将用户的init更改为:
def __init__(self, user_id = None, name = None):
self.user_id = user_id
self.name = name
至于复制映射的实例,我建议阅读this thread
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/188847.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...