我正在处理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)
答案 0 :(得分:1)
在Sq.__init__
方法中,您要设置 class 变量的值,而不是实例变量的值。这些值由该类的所有实例共享,并且在任何一个实例中更改后都将在所有实例中覆盖。有关类和实例变量的描述,请参见here。
将每行更改为例如self.datetime_created = datetime.datetime.now()
等。