Python OOP:对象参数,取决于调用方法的位置
这不是一个纯粹的技术问题,我正在努力寻找最干净、最有效的解决方案 我正在用Python3做一个树探索程序,我在这棵树的每一片叶子中使用一个我需要的对象。我希望我的对象的参数值在程序中的不同位置(在不同的叶子中)是可编辑的,并且在所有叶子中更新该值,因此我需要在任何地方使用相同的对象(指向相同对象的指针,而不是对象的副本)。但是,我希望其中一个参数取决于对象所在的叶 我需要很多这样的东西 因此,我看到了几种选择:Python OOP:对象参数,取决于调用方法的位置,python,oop,Python,Oop,这不是一个纯粹的技术问题,我正在努力寻找最干净、最有效的解决方案 我正在用Python3做一个树探索程序,我在这棵树的每一片叶子中使用一个我需要的对象。我希望我的对象的参数值在程序中的不同位置(在不同的叶子中)是可编辑的,并且在所有叶子中更新该值,因此我需要在任何地方使用相同的对象(指向相同对象的指针,而不是对象的副本)。但是,我希望其中一个参数取决于对象所在的叶 我需要很多这样的东西 因此,我看到了几种选择: 使用两个对象而不是一个:一个包含对象B作为参数的对象A。因此,我为每个新叶创建对
- 使用两个对象而不是一个:一个包含对象B作为参数的对象A。因此,我为每个新叶创建对象A的副本,但对象B参数始终指向同一个对象(因此我对它的更改“传播”到所有叶)。因此,我可以在对象A中创建特定于叶的参数李>
- 将特定于叶的变量与每个叶中的对象分开存储,并在调用对象的方法时将其作为参数发送。这不太方便,因为我在每个叶中使用了很多对象,所以我应该有一些包含这些变量的字典,这些变量的键是我的对象。问题是,我的对象的某些方法是从其他对象调用的,所以我必须通过所有被调用的对象传递这个字典。它不太干净,复杂性更高(每次调用方法时都需要在字典中搜索)李>
- 同样,但是特定于叶的参数的词汇存储在每个对象中,键就是叶。我必须给出我调用的每个方法的当前叶指针
目前正在研究选项1,仍然不确定它是否是最好的。不太确定您的要求。然而,也许类变量可以解决您的问题。 每个
Leaf
都有特定于/唯一于每个Leaf实例的实例变量。Leaf
类有一个在所有叶实例之间共享的类变量
class Leaf:
class_variable = 0
def __init__(self):
from random import randint
Leaf.class_variable = randint(0, 100)
self.instance_variable = randint(0, 100)
number_of_leaves = 5
leaves = [Leaf() for _ in range(number_of_leaves)]
for leaf in leaves:
print(f"class variable: {leaf.class_variable}\ninstance variable: {leaf.instance_variable}")
输出:
class variable: 79
instance variable: 7
class variable: 79
instance variable: 57
class variable: 79
instance variable: 93
class variable: 79
instance variable: 2
class variable: 79
instance variable: 65
>>>
不太确定你在问什么。然而,也许类变量可以解决您的问题。 每个
Leaf
都有特定于/唯一于每个Leaf实例的实例变量。Leaf
类有一个在所有叶实例之间共享的类变量
class Leaf:
class_variable = 0
def __init__(self):
from random import randint
Leaf.class_variable = randint(0, 100)
self.instance_variable = randint(0, 100)
number_of_leaves = 5
leaves = [Leaf() for _ in range(number_of_leaves)]
for leaf in leaves:
print(f"class variable: {leaf.class_variable}\ninstance variable: {leaf.instance_variable}")
输出:
class variable: 79
instance variable: 7
class variable: 79
instance variable: 57
class variable: 79
instance variable: 93
class variable: 79
instance variable: 2
class variable: 79
instance variable: 65
>>>
你试过什么?发布一些示例代码(即不是有一千个叶子),也许这样做可以帮助您找到您喜欢的方式?对每个叶子使用单独的对象,对所有叶子共享的值使用类属性,对叶子特定的值使用实例属性。@barny我还没有编写任何代码,我知道如何使其工作(正如我在不同选项中所说)但我想首先考虑最佳解决方案。@jasonharper我忘了指定在给定的叶中,几个对象是同一类的实例,因此具有不同的参数值……编写一些代码可能会帮助您自己解决问题,因此它满足您的所有需要,无论您的问题与否。您尝试了什么?发布一些示例代码(即不是有一千个叶子),也许这样做可以帮助您按照自己喜欢的方式工作?对每个叶子使用单独的对象,对所有叶子共享的值使用类属性,对叶子特定的值使用实例属性。@barny我还没有写任何代码,我知道如何使它工作(正如我在不同选项中所说)但我想首先考虑最佳解决方案。@jasonharper我忘了指定在给定的叶中,几个对象是同一类的实例,因此具有不同的参数值……编写一些代码可能会帮助您自己解决问题,因此它满足您的所有需要,无论您的问题与否。事实上,我的帖子可能没有我不是很清楚。我只是添加了一个图表来说明它。你的解决方案很有趣,但我需要在每个叶中使用来自同一类的多个实例,具有不同的参数值……事实上,我的帖子可能不是很清楚。我只是添加了一个图表来说明它。你的解决方案很有趣,但我需要使用来自每个叶中都有相同的类,具有不同的参数值。。。