python deepcopy函数_Python deepcopy

python deepcopy函数_Python deepcopy我想为给定的SQLAlchemy映射类重写__deepcopy__,以便它忽略任何SQLA属性,但深入复制其他所有类的类.我并不是特别熟悉覆盖任何Python的内置对象,但我对我想要的东西有所了解.让我们创建一个使用SQLA映射的非常简单的类User.classUser(object):def__init__(self,user_id=None,name=None):self.user_i…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新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 07​​000.例如,尝试将用户的init更改为:

def __init__(self, user_id = None, name = None):

self.user_id = user_id

self.name = name

至于复制映射的实例,我建议阅读this thread

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/188847.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • CF# 260 A. Laptops

    CF# 260 A. Laptops

    2022年1月27日
    62
  • 数据库中去重_mysql数据去重

    数据库中去重_mysql数据去重数据库中如何去重:数据库中去重,需要分五步走一、找出重复值清单,利用distinct或groupby的方式将重复值清单取出二、将没有重复值的数据利用createtabletable_nameas步骤一中的查询语句三、将原表中数据利用truncatetabletable_name;的方式清空四、利用insertintotableselect*from无重复数据的表中五、将刚刚建立的表清掉即可推荐一个学习数据库,python,linux干货比较多的公众号:“数据与编程

    2022年9月30日
    0
  • GoLand 2021.5.3 激活码【在线注册码/序列号/破解码】

    GoLand 2021.5.3 激活码【在线注册码/序列号/破解码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    51
  • 在毕设中学习01——python、正态和标准正态分布、matlab数据文件导出

    在毕设中学习01——python、正态和标准正态分布、matlab数据文件导出在毕设中学习——卷积、python(0521)2022.5.21文章目录在毕设中学习——卷积、python(0521)正态分布标准正态分布matplotlib.pyplot画图Python中读取.m文件np.random.normal()正态分布numpy.random.normal(loc=0,scale=1e-2,size=shape)意义如下:参数loc(float):正态分布的均值,对应着这个分布的中心。loc=0说明这一个以Y轴为对称轴的正态分布,参数scale(float):

    2022年8月11日
    3
  • 遍历ArrayList,并删除某些元素的方法实现「建议收藏」

    遍历ArrayList,并删除某些元素的方法实现「建议收藏」本文是根据https://blog.csdn.net/qq_32575047/article/details/78902254的帖子进行整理的,在此感谢一下。题目:一个ArrayList对象aList中存有若干个字符串元素,现欲遍历该ArrayList对象,删除其中所有值为”abc”的字符串元素,请用代码实现。publicclassTest1{public…

    2022年9月30日
    0
  • selenium-webdriver_web driver

    selenium-webdriver_web driverChrome:https://chromedriver.storage.proxy.ustclug.org/index.html         https://sites.google.com/a/chromium.org/chromedriver/downloads Firefox:https://github.com/mozilla/geckodriver/release…

    2022年9月18日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号