让我们假设以下情况:我有一个带有一些初始值的类。此外,我想提供一种在初始化新对象时传递用户定义方法的可能性。用户预先了解该类的属性,并且可能希望在函数中考虑它们,例如:
- Pasta Salad
- Description:
bla
bla
- Ingredients:
* ingredient 1
* ingredient 2
* ingredient 3
- Preperation:
bla
bla
bla
- Ingredients:
* ingredient 4
* ingredient 5
* ingredient 6
当然,给定的示例不起作用,但我希望它能说明我想做什么。我正在寻找一种在类外部定义函数的方法,该函数引用在初始化期间传递对象后的对象属性。
我试图避免的是解决具有固定名称约定的问题,例如:
[['ingredient 1', 'ingredient 2', 'ingredient 3'],
['ingredient 4', 'ingredient 5', 'ingredient 6']]
我认为我需要的是一种占位符或替代自我。有人有主意吗?
答案 0 :(得分:6)
这行得通,尽管不确定这是实现所需目标的最优雅方法:
class some_class():
def __init__(self, some_method):
self.a = 8
self.b = 12
self.some_method_func = some_method
def some_method(self):
return self.some_method_func(self)
def some_function(self):
return self.a + self.b
some_object = some_class(some_method = some_function)
print(some_object.some_method())
答案 1 :(得分:0)
如果我没看错,那么简单的选择就是执行以下操作:
class some_class():
def __init__(self):
self.a = 8
self.b = 12
def some_method(self):
pass
def my_method(self):
return self.a + self.b
# Redefine the class method
some_class.some_method = my_method
# Or, if you only want to do it for a specific instance:
instance = some_class()
instance.some_method = my_method
尽管“正确”执行此操作的通常方法是使用子类化。
答案 2 :(得分:0)
您需要获得课程和课程的调用者才能同意合同。约定是该类将类的实例传递给该函数,并且该函数必须接受该类作为参数。
class some_class():
def some_method(self):
return self.some_method_func(self)
def some_function(obj):
return obj.a + obj.b