# Setting Class variable as function Polymorphism

**URL:** <https://numba.discourse.group/t/setting-class-variable-as-function-polymorphism/2133>\
**Category:** Community Support\
**Created:** [September 15, 2023, 10:08pm UTC](https://numba.discourse.group/t/setting-class-variable-as-function-polymorphism/2133 "2023-09-15T22:08:12Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![QuantFreedom1022](https://yyz2.discourse-cdn.com/free1/user_avatar/numba.discourse.group/quantfreedom1022/32/827_2.png) [@QuantFreedom1022](https://numba.discourse.group/u/QuantFreedom1022)\
**Post date:** [September 15, 2023, 10:08pm UTC](https://numba.discourse.group/t/setting-class-variable-as-function-polymorphism/2133/1 "2023-09-15T22:08:12Z")

</div>

i am trying to set a variable as a function so that it it can be like a menu … basically allow for polymorphism

@jitclass()  
class LeverageLong:  
leverage\_calculator: None

```
def __init__ (
    self,
    leverage_type: int,
):
    if leverage_type == 0:
        self.leverage_calculator = self.set_static_leverage
    elif leverage_type == 1:
        self.leverage_calculator = self.calculate_dynamic_leverage
    self.leverage_calculator = self.calculate_dynamic_leverage

def set_static_leverage(
    self,
):
    return 1

def calculate_dynamic_leverage(
    self,
):
    return 9

```

then i should be able to do something like  
lev = LeverageLong(1)

lev.leverage\_calculator()

but it is saying the class member isn’t supported … does anyone know how to make something like this work in numba?

---

<div class="post-metadata">

**Author:** ![gmarkall](https://yyz2.discourse-cdn.com/free1/user_avatar/numba.discourse.group/gmarkall/32/42_2.png) [@gmarkall](https://numba.discourse.group/u/gmarkall)\
**Post date:** [September 18, 2023, 2:01pm UTC](https://numba.discourse.group/t/setting-class-variable-as-function-polymorphism/2133/2 "2023-09-18T14:01:46Z")

</div>

I think you’d have to store the selected value then dispatch based on it in a function, like:

```python
from numba import njit
from numba.experimental import jitclass

@jitclass()
class LeverageLong:
    leverage_type: int

    def __init__ (self, leverage_type: int):
        self.leverage_type = leverage_type

    def leverage_calculator(self):
        if self.leverage_type == 0:
            return self.calculate_static_leverage()
        elif self.leverage_type == 1:
            return self.calculate_dynamic_leverage()

    def calculate_static_leverage(self):
        return 1

    def calculate_dynamic_leverage(self):
        return 9

@njit
def f(leverage_type):
    lev = LeverageLong(leverage_type)
    return lev.leverage_calculator()

print(f(1))
print(f(0))

```

---

<div class="post-metadata">

**Author:** ![QuantFreedom1022](https://yyz2.discourse-cdn.com/free1/user_avatar/numba.discourse.group/quantfreedom1022/32/827_2.png) [@QuantFreedom1022](https://numba.discourse.group/u/QuantFreedom1022)\
**Post date:** [September 18, 2023, 9:19pm UTC](https://numba.discourse.group/t/setting-class-variable-as-function-polymorphism/2133/3 "2023-09-18T21:19:59Z")

</div>

ok thank you for this … but the problem is that i want to run this through a loop of lets say 10 _example below_ … when i do this when i turn numba off it is always checking in the if statement … so the way i would like this to work is that it only checks the if statement one time then instantly executes the dynamic leverage if i had one as the leverage type … do you know how to make it do that ?

@jitclass()  
class LeverageLong:  
leverage\_type: int

```
def __init__ (self, leverage_type: int):
    self.leverage_type = leverage_type

def leverage_calculator(self):
    if self.leverage_type == 0:
        return self.calculate_static_leverage()
    elif self.leverage_type == 1:
        return self.calculate_dynamic_leverage()

def calculate_static_leverage(self):
    return 1

def calculate_dynamic_leverage(self):
    return 9

```

lev = LeverageLong(1)  
for i in range(10):  
# print(“hello”)  
print(lev.leverage\_calculator())

the way this is working is that it goes and does the if statement all 10 times if you don’t have numba on … but i don’t want it to do it that way

---

<div class="post-metadata">

**Author:** ![QuantFreedom1022](https://yyz2.discourse-cdn.com/free1/user_avatar/numba.discourse.group/quantfreedom1022/32/827_2.png) [@QuantFreedom1022](https://numba.discourse.group/u/QuantFreedom1022)\
**Post date:** [September 18, 2023, 9:28pm UTC](https://numba.discourse.group/t/setting-class-variable-as-function-polymorphism/2133/4 "2023-09-18T21:28:44Z")

</div>

here is an example of how this works perfectly … only calls the if statement once

@jitclass()  
class LeverageLong:  
leverage\_calculator: None

```
def __init__ (self, leverage_type: int):
    if leverage_type == 0:
        self.leverage_calculator = self.set_static_leverage
    elif leverage_type == 1:
        self.leverage_calculator = self.calculate_dynamic_leverage

def set_static_leverage(self):
    print(1)

def calculate_dynamic_leverage(self):
    print(9)

```

tester = LeverageLong(1)  
for i in range(10):  
tester.leverage\_calculator()
