【发布时间】:2019-10-05 12:49:28
【问题描述】:
我正在编写一个 Python 脚本,运行一个从类中实例化对象的函数。运行此函数两次(假设创建两个对象)会创建两个指向同一内存位置的变量,实际上使我只有一个对象。如果对象的属性两次都相同,这是可以理解的,但事实并非如此。这意味着第一个实例化的属性会被第二个实例化覆盖。
我已尝试制作深层副本以纠正此问题。
x = deepcopy(create_my_object(123))
y = deepcopy(create_my_object('abc'))
x 和 y 仍然指向同一个内存位置。这意味着对象 x 的属性“123”被“abc”覆盖。我想要两个具有这些属性的对象。
类:
class Sq:
def __init__(self, source, queries):
Sq.datetime_created = datetime.datetime.now()
Sq.source = source
Sq.queries = queries
Sq.count = len(queries)
Sq.filtered = False
总而言之,用不同的 args 集调用这个类不会在不同的位置创建对象,我只是最终得到一个具有最近实例化属性的对象。
提前致谢 - 我和我的同龄人都被难住了!
编辑:创建对象的函数如下所示:
def news(url):
page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')
result = soup.find_all(class_='top-story__title')
return Sq(url, result)
【问题讨论】:
-
1) create_my_object 函数是什么样的?希望这个内容可以帮助你:geeksforgeeks.org/copy-python-deep-copy-shallow-copy
-
谢谢@Eric。我知道没有正确复制东西,但我认为情况并非如此。我已将该功能添加到原始帖子中。调用该函数以创建具有不同“url”参数的类不会在不同的内存区域中创建对象,从而导致旧的不同对象被覆盖:(