在编写调用时如何在Python中嵌套类

2024-09-30 05:33:26 发布

您现在位置:Python中文网/ 问答频道 /正文

希望下面能说明我的观点。我想设置一次translate属性,然后能够将任何mod(比如translate)传递到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)

Tags: inselfmodmodsforinitdeftranslate
2条回答

作为参数传递。你知道吗

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论坛上找到了访问外部类的方法。Solved referencing outer class from an inner class。 我需要这样做,将一些参数传递给转换构造函数,然后重写调用函数以使用这些参数。这与C++函数对象类似,就像您将传递给STL算法:more on function objects。你知道吗

相关问题 更多 >

    热门问题