如何在外部 class 中实现唯一的 class 方法

How to implement a sole class of methods inside an external class

我有一个外部 class 来表示我的数据 idk。在 class idk 中,我想要另一个 class change,它将包含各种方法来更改 class idk 的实例。我试过的是下面。注意:这是我实际代码的简化示例

class idk:
  def __init__(self):
    self.x=1
    self.y=2
  class change:
    def func(self):
      self.x=10
      self.y=100

var=idk()
var.change.func()
print(var.x, var.y)

然而,这给出了错误: 类型错误:func() 缺少 1 个必需的位置参数 'self'

如何更改代码以使其工作?

好吧,首先,您收到此错误是因为您正在访问 func 函数作为 class 属性而不是它的实例(将 class另一个 class 中的定义不会使其成为实例)。

如果有道理,你云把那些“改变方法”直接放在 idk class 中(这将是一个正常的方法):

class idk:
    def __init__(self):
        self.x = 1
        self.y = 2
  
    def func(self):
        self.x = 10
        self.y = 100

var = idk()
var.func()
print(var.x, var.y)  # Output: 10 100

如果您真的want/need 将这些方法分开,您可以再做一个class。我实现 class 的方法是使用静态方法,其中所有方法都接收一个 idk 实例作为第一个参数:

class idk:
    def __init__(self):
        self.x = 1
        self.y = 2

class idkChanger:
    @staticmethod
    def func(idk_obj):
        idk_obj.x = 10
        idk_obj.y = 100

var = idk()
idkChanger.func(var)
print(var.x, var.y)  # Output: 10 100

如果你真的 want/need 在 idk class 里面有那个“转换器” class 你可以在那里定义它,但这在全部。此外,您还必须传递实例,即 Changer class:

class idk:
    def __init__(self):
        self.x = 1
        self.y = 2

    class Changer:
        @staticmethod
        def func(idk_obj):
            idk_obj.x = 10
            idk_obj.y = 100

var = idk()
idk.Changer.func(var)
print(var.x, var.y)  # Output: 10 100

最后的注释:

您不能将 func 标记(装饰)为静态,它的工作原理是一样的,但是由于多种原因,这会带来更多的混乱(例如,您在技术上会说 func 是实例方法。这不是,因为您要更改的对象不是 Change 的实例,而是 idk 的实例)。