如何避免Python中类示例的重复?

gmxoilav  于 2023-02-06  发布在  Python
关注(0)|答案(2)|浏览(162)

当使用__init __()函数创建类示例时,有什么好的方法可以避免类示例的重复?这个问题是this issue的一个结果。
上下文(使用employee类示例):
1.假设我有一个employee类:__init __(本人、姓名、部门)
1.我还有一个方法,employee.info(self),可以打印出任何员工的姓名和部门。
1.然而,用户可以通过调用a=employee(args..)来添加一个雇员,他们可以使用相同的示例变量a,但使用不同的雇员名称来多次执行此操作。
1.如果他们尝试打印www.example.com(),这将导致问题a.info,因为每次打印的员工姓名都不同。
有没有更好的方法来完成这个任务?我知道有可能让__init __()“通过”并定义一个新方法来创建示例。
预期结果:

>>Adam=employee('marketing')
>>Adam.info()
>>Adam works in marketing.

>>a=employee('Adam','marketing')
>>a=employee('Mary','marketing')
>>Error: employee instance with identifier "a" already exists. 
>>Use employee.update() method to modify existing record.

有没有一种更干净的方法来做这件事?(正如你可能猜到的,我还在学习python)。或者写一个显式函数(而不是类方法)来添加新员工是一种好的实践吗?

kx7yvsdv

kx7yvsdv1#

你所尝试的是不可能的,因为在

a=employee('Adam','marketing')

a不是对象,而是指向对象employee('Adam','marketing')的变量。
当你这样做

a=employee('Mary','marketing')

你对python说,a现在不能指向对象employee('Adam','marketing'),而是指向对象employee('Mary','marketing'),然后,如果你没有更多的变量来引用对象employee('Adam','marketing'),垃圾收集器会销毁它。
你必须考虑到在python中所有的都是对象,而不是那些仅仅是操作对象的引用的变量。

hk8txs48

hk8txs482#

我一直在为同样的问题绞尽脑汁,终于设法想出了一个变通办法:
1.创建一个字典,存储雇员姓名和相关对象,如下所示:total_emp_dict = {}
1.将以下代码添加到类employeedef __init__中:total_emp_dict[name] = self。这将确保将每个雇员姓名添加为键,并将关联的对象添加为值。
1.现在在employee类定义之前创建一个新的函数,我们称之为create_new_emp,如下所示:
#function to check and avoid duplicate assignment of instances

def create_new_emp(name, dept):
      if name in total_emp_dict:
         return total_emp_dict[name]
      else:
         return employee(name, dept)

1.创建任何新员工时,请使用此新功能:a = create_new_emp("Adam", HR)而不是a = employee("Adam", HR)
说明:此函数将确保不会重复赋值。如果"a"已经赋值给"Adam",则再次调用时,此函数将返回"Adam"的对象给"a"。但如果没有赋值给"a",则此函数将移交属性(name, dept)employee类,并创建一个新示例。然后将此示例赋值给"a"。
我不知道这是否是解决这个问题的最佳方案,但老实说,这是我目前找到的唯一解决方案,它对我来说非常有效,没有太多麻烦/额外的代码空间。希望它对你也有效!:)

相关问题