Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python OOP:对象参数,取决于调用方法的位置_Python_Oop - Fatal编程技术网

Python OOP:对象参数,取决于调用方法的位置

Python OOP:对象参数,取决于调用方法的位置,python,oop,Python,Oop,这不是一个纯粹的技术问题,我正在努力寻找最干净、最有效的解决方案 我正在用Python3做一个树探索程序,我在这棵树的每一片叶子中使用一个我需要的对象。我希望我的对象的参数值在程序中的不同位置(在不同的叶子中)是可编辑的,并且在所有叶子中更新该值,因此我需要在任何地方使用相同的对象(指向相同对象的指针,而不是对象的副本)。但是,我希望其中一个参数取决于对象所在的叶 我需要很多这样的东西 因此,我看到了几种选择: 使用两个对象而不是一个:一个包含对象B作为参数的对象A。因此,我为每个新叶创建对

这不是一个纯粹的技术问题,我正在努力寻找最干净、最有效的解决方案

我正在用Python3做一个树探索程序,我在这棵树的每一片叶子中使用一个我需要的对象。我希望我的对象的参数值在程序中的不同位置(在不同的叶子中)是可编辑的,并且在所有叶子中更新该值,因此我需要在任何地方使用相同的对象(指向相同对象的指针,而不是对象的副本)。但是,我希望其中一个参数取决于对象所在的叶

我需要很多这样的东西

因此,我看到了几种选择:

  • 使用两个对象而不是一个:一个包含对象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我忘了指定在给定的叶中,几个对象是同一类的实例,因此具有不同的参数值……编写一些代码可能会帮助您自己解决问题,因此它满足您的所有需要,无论您的问题与否。事实上,我的帖子可能没有我不是很清楚。我只是添加了一个图表来说明它。你的解决方案很有趣,但我需要在每个叶中使用来自同一类的多个实例,具有不同的参数值……事实上,我的帖子可能不是很清楚。我只是添加了一个图表来说明它。你的解决方案很有趣,但我需要使用来自每个叶中都有相同的类,具有不同的参数值。。。