Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.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中嵌套类_Python_Function_Python 3.x_Class_Object - Fatal编程技术网

当试图编写_调用_覆盖时,如何在Python中嵌套类

当试图编写_调用_覆盖时,如何在Python中嵌套类,python,function,python-3.x,class,object,Python,Function,Python 3.x,Class,Object,希望下面能说明我的观点。我想设置一次translate属性,然后能够将任何类似translate的mod传递到modLevels函数中。我知道如何做到这一点的唯一方法是通过嵌套类,但我不知道如何访问外部类点。如果我在这件事上做错了,你有什么想法,甚至可能让我知道。谢谢 class PointSet: def __init__(self, points): self.points = points class translate: def __init__(self,

希望下面能说明我的观点。我想设置一次translate属性,然后能够将任何类似translate的mod传递到modLevels函数中。我知道如何做到这一点的唯一方法是通过嵌套类,但我不知道如何访问外部类点。如果我在这件事上做错了,你有什么想法,甚至可能让我知道。谢谢

class PointSet:
  def __init__(self, points):
     self.points = points

  class translate:
     def __init__(self, xmove=0, ymove=0):
        self.xmove = xmove
        self.ymove = ymove
     def __call__(self):
        for p in Outer.points: # <-- this part isnt working
           p.x += self.xmove; p.y += self.ymove

def modLevels(levels, *mods):
  for lev in range(levels):
     for mod in mods:
        mod

set1 = PointSet(...list of point objects here...)
coolMod = translate(xmove=5)
change(5, coolMod)

将其作为参数传递

class PointSet:
    def __init__(self, points):
        self.points = points

    class translate:
        def __init__(self, xmove=0, ymove=0, parent):
            self.parent = parent
            self.xmove = xmove
            self.ymove = ymove
    def __call__(self):
        for p in self.parent.points:
            p.x += self.xmove; p.y += self.ymove
独立示例:

class A:
    def __init__(self):
        self.data = [1,2,3]
    class B:
        def __init__(self, parent):
            self.data = [4,5,6]
            self.parent = parent
        def access(self):
            print(self.parent.data)

a = A()
b = a.B(a)
b.access()
但是,正如注释中所解释的,您根本不需要嵌套类

class PointSet:
    def __init__(self, points):
        self.points = points

    def translate(self, x, y):
        for p in self.points:
            p.x += x
            p.y += y

谢谢大家的帮助。我找到了一种在ubuntu论坛上访问外部类的方法。
我需要这样做,将一些参数传递给转换构造函数,然后覆盖调用函数以使用这些参数。这是一个类似于C++函数对象的概念,类似于你将传递给STL算法:.< /p>不清楚为什么需要嵌套类,以及为什么你指的是被称为“外”的东西,这是从来没有定义过的。为了将任何成员函数传递到MODLASE,并且能够调用MODE而不必调用它。每次使用参数时,必须使用一些值初始化转换。这就是两个嵌套类的原因。外部是指外部类,我不知道最好的方法是什么,你所设计的是类PointSet和translate之间的一种组合或聚合。这似乎是一种误解。translate应该是一个方法,而不是一个类。同样,您希望转换点集还是点集?我认为你应该用translate方法定义一个Point类。好的,你应该在问题中描述你想要的设计,不要嵌套类,这样你试图解决的问题就清楚了。然后可能会描述嵌套类是如何使您想做得更好的东西。事实上,你有一段代码,你认为其他人可以从中获得你的想法,但事实并非如此。好吧,这回答了它的问题,但这显然是一个误解。这个解决方案对初学者不是很有用。他可以自己做作业,对吗?@LaurentPorte-我本来想说的是,我从未见过必要的嵌套类,但我在自己的代码中看到的是,由于不完全理解如何传递对象,所以在不适当的范围内声明了一些东西,所以我想我应该证明这一点。@LaurentPorte-如果没有任何示例说明如何在没有嵌套类的情况下实现这一点,那么这个答案就不完整了,所以我添加了它。我同意。嵌套类在继承时可能很有用:子类继承并重写嵌套类。经典用例:组合。