当试图编写_调用_覆盖时,如何在Python中嵌套类
希望下面能说明我的观点。我想设置一次translate属性,然后能够将任何类似translate的mod传递到modLevels函数中。我知道如何做到这一点的唯一方法是通过嵌套类,但我不知道如何访问外部类点。如果我在这件事上做错了,你有什么想法,甚至可能让我知道。谢谢当试图编写_调用_覆盖时,如何在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,
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-如果没有任何示例说明如何在没有嵌套类的情况下实现这一点,那么这个答案就不完整了,所以我添加了它。我同意。嵌套类在继承时可能很有用:子类继承并重写嵌套类。经典用例:组合。