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 变量一起使用。
有人可以帮我吗?
提前致谢。
示例 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)