当使用__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)。或者写一个显式函数(而不是类方法)来添加新员工是一种好的实践吗?
2条答案
按热度按时间kx7yvsdv1#
你所尝试的是不可能的,因为在
a
不是对象,而是指向对象employee('Adam','marketing')
的变量。当你这样做
你对python说,
a
现在不能指向对象employee('Adam','marketing')
,而是指向对象employee('Mary','marketing')
,然后,如果你没有更多的变量来引用对象employee('Adam','marketing')
,垃圾收集器会销毁它。你必须考虑到在python中所有的都是对象,而不是那些仅仅是操作对象的引用的变量。
hk8txs482#
我一直在为同样的问题绞尽脑汁,终于设法想出了一个变通办法:
1.创建一个字典,存储雇员姓名和相关对象,如下所示:
total_emp_dict = {}
1.将以下代码添加到类
employee
的def __init__
中:total_emp_dict[name] = self
。这将确保将每个雇员姓名添加为键,并将关联的对象添加为值。1.现在在
employee
类定义之前创建一个新的函数,我们称之为create_new_emp
,如下所示:#function to check and avoid duplicate assignment of instances
1.创建任何新员工时,请使用此新功能:
a = create_new_emp("Adam", HR)
而不是a = employee("Adam", HR)
说明:此函数将确保不会重复赋值。如果"a"已经赋值给"Adam",则再次调用时,此函数将返回"Adam"的对象给"a"。但如果没有赋值给"a",则此函数将移交属性
(name, dept)
到employee
类,并创建一个新示例。然后将此示例赋值给"a"。我不知道这是否是解决这个问题的最佳方案,但老实说,这是我目前找到的唯一解决方案,它对我来说非常有效,没有太多麻烦/额外的代码空间。希望它对你也有效!:)