【发布时间】:2019-09-19 03:36:14
【问题描述】:
我正在用 python 进行一些编码,但遇到了一些小问题:
我定义了几个版本的函数,并希望在创建对象时在 __init__ 函数中分配其中一个。我需要这些函数有一个self 参数。
我找到了一种方法,但我无法判断我是否正确使用了该语言。
在 my_class.py 中
class my_class(object):
fun_1 = lambda self,val: self.attr + val
fun_2 = lambda self,val: self.attr - val
def __init__(self, attr, fun_version):
self.attr = attr
my_class.fun = my_class.__dict__['fun_' + str(fun_version)]
在 test.py 中
import my_class
my_instance_1 = my_class.my_class(attr = 2, fun_version = 1)
print(my_instance_1.fun(1))
my_instance_2 = my_class.my_class(attr = 2, fun_version = 2)
print(my_instance_2.fun(1))
结果符合预期:
3
1
还有更优雅的方法吗?我觉得在 __init__ 函数中定义类方法很尴尬。
【问题讨论】:
-
您知道如果创建了两个具有不同
fun_version的对象,最后一个构造定义了用于整个类的方法(影响所有对象,也影响早期创建的对象)? -
不,我没有!这是我想避免的行为。有没有一种方法可以创建与一个实例相关联的乐趣?