Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Create method with class self variables outside of a python class and then add it as a method to class

I would like to create a method outside a class that works with some self class variables, and then add it to the class when is instanciated.

Something like this:

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)

So, when:

used_method = 1
myobject = myClass()
myobject.run()

Output should be 11, but when:

used_method = 2
myobject = myClass()
myobject.run()

Output should be -3.

This is because the class is very big and I want to allow the user to customize the outside_method that works with self variables that change on each iteration of the run method.

Can somebody help me with this please?

Thanks in advance.

like image 450
jfcabreras Avatar asked Dec 06 '25 06:12

jfcabreras


1 Answers

Example 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)

Example 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)
like image 55
pppig Avatar answered Dec 08 '25 19:12

pppig



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!