【发布时间】:2016-07-31 00:43:03
【问题描述】:
我正在用 python(3) 创建一个游戏,我有一个主类,其中包含游戏循环和一堆变量。我有一个子类来创建“路径”对象,我需要主类中的变量。我还需要从主超类调用子类。每次调用子类的时候,也会调用主类的init方法来传递变量。问题是当这种情况发生时,它会重置主类中所有变量的值。
class Main:
def __init__(self):
foo = 0
sub1 = Sub()
def foo_edit(self):
self.foo += 5
def main(self):
sub2 = Sub()
class Sub(Main):
def __init__(self):
super(Sub, self).__init__()
self.bar = 0
def foo_edit(self):
self.foo += 10
我查看了许多其他类似的问题,但没有一个给出我需要的答案。我在我的代码中尝试了 sub1(在 main 的 init 函数中),这会产生递归循环错误,因为 init 函数会永远互相调用。当我在游戏循环(或本例中的 main)中调用它时,它会在每次调用时重新初始化 Main,擦除 Sub 中所需的变量。之前我只有一个“路径”实例,所以我不需要类,并且有一个函数。现在我需要多个“路径”对象,我正在使用 main 的子类来获取我需要的变量。
对此问题的解决方案可以回答或不回答我的问题(从超类调用子类可能是一个坏主意),我们将不胜感激。提前致谢。
编辑:我可以将所需的变量传递给“Sub”类,但是我需要更新它们,所以我需要某种更新方法来确保传入的变量在 Sub 中在 Main 中时发生更改.这很容易实现,但我想知道是否有更简单/更好的方法。
【问题讨论】:
-
继承
Main的目的是什么?鉴于它的名称为Main,这意味着它是主程序,拥有两个“主”程序是没有意义的。 -
@BryanOakley 这不是两个主要程序,在我的游戏中我有一个制作路径的功能,现在我想制作 x 个路径,所以我制作了一个路径类,这样我就可以制作 x 个对象的路径类。它需要主类中的变量来进行计算,这就是它从主类继承的原因。
-
你的例子很难理解,因为这两个类实际上都没有做任何事情。你说你需要
sub,但你的班级对它没有任何作用。为什么你的类需要一个自身子类的实例?如果Main的每个实例都需要Sub的实例,而Sub是Main的实例,那么您是说Sub的每个实例都需要Sub的实例,这甚至是递归的只是在概念上。如果Sub“需要来自主类的变量”,那并不意味着你需要Sub从Main继承;您可以让Main实例将自身传递给Sub方法。 -
谈论代码气味...您不必将每个主要属性作为参数传递...也许可以尝试将
Main实例传递给您的Sub,而不是从@987654338 继承@ 在您的Main类中,您甚至可以拥有sub1 = Sub(self)。然后,您可以在Sub的逻辑中使用该实例来创建路径。这是一个经典的继承案例,其中对象组合可能是最好的方法。
标签: python class python-3.x oop