在python类之外使用类自变量创建方法,然后将其作为方法添加到类中

jfc*_*ras 2 python methods class function

我想在类之外创建一个使用一些自类变量的方法,然后在实例化时将其添加到类中。

像这样的东西:

used_method = int(input())

if used_method == 1:
    def outside_method(var1=self.var1, var2=self.var2):
      return (var1 + var2)
elif used_method == 2:
    def outside_method(var1=self.var1, var2=self.var2, var3=self.varx):
      return (var1 - var2) * var3

class myClass():
    def __init__(self, varx=3, vary=2):
        self.varx = varx
        self.vary = vary
        self.var1 = 0
        self.var2 = 0
    
    def _method1(self, x, y):
        a = x + y
        b = x * y
        return a, b
    
    def run(self)
        self.var1, self.var2 = self._method1(self.varx, self.vary)
        target = outside_method()
        print(target)
Run Code Online (Sandbox Code Playgroud)

所以,当:

used_method = 1
myobject = myClass()
myobject.run()
Run Code Online (Sandbox Code Playgroud)

输出应该是 11,但是当:

used_method = 2
myobject = myClass()
myobject.run()
Run Code Online (Sandbox Code Playgroud)

输出应该是-3。

这是因为该类非常大,我希望允许用户自定义 external_method,该方法与在 run 方法的每次迭代中更改的 self 变量一起使用。

有人可以帮我吗?

提前致谢。

ppp*_*pig 5

示例 1:

used_method = int(input())

if used_method == 1:
    def outside_method(self):
        return self.var1 + self.var2
elif used_method == 2:
    def outside_method(self):
        return (self.var1 - self.var2) * self.varx


class myClass():
    def __init__(self, varx=3, vary=2):
        self.varx = varx
        self.vary = vary
        self.var1 = 0
        self.var2 = 0

    def _method1(self, x, y):
        a = x + y
        b = x * y
        return a, b

    def run(self):
        self.var1, self.var2 = self._method1(self.varx, self.vary)
        target = outside_method(self)
        print(target)
Run Code Online (Sandbox Code Playgroud)

示例 2:

used_method = int(input())

if used_method == 1:
    def outside_method(var1, var2):
        return var1 + var2
elif used_method == 2:
    def outside_method(var1, var2, var3):
        return (var1 - var2) * var3


class myClass():
    def __init__(self, varx=3, vary=2):
        self.varx = varx
        self.vary = vary
        self.var1 = 0
        self.var2 = 0

    def _method1(self, x, y):
        a = x + y
        b = x * y
        return a, b

    def run(self):
        self.var1, self.var2 = self._method1(self.varx, self.vary)
        args = [self.var1, self.var2]
        target = outside_method(*((*args, self.varx) if used_method == 2 else args))
        print(target)
Run Code Online (Sandbox Code Playgroud)