This is a similar question but my goal is not performance but readability.
Let's say I have different Behaviours
, and they share a repeated function f1()
.
from abc import ABCMeta, abstractmethod
class Behavior:
__metaclass__ = ABCMeta
@abstractmethod
def run(self):
pass
class Behavior1(Behavior):
def __init__(self, data):
self.data = data
def run(self):
def f1():
print(self.data*localVar)
localVar = 1.
f1()
class Behavior2(Behavior):
def __init__(self, data):
self.data = data
def run(self):
def f1():
print(self.data*localVar)
localVar = 2.
f1()
class Behavior3(Behavior):
def __init__(self, data):
self.data = data
def run(self):
def f1():
print(self.data*localVar)
localVar = 3
f1()
I want f1()
to have access to instance attributes and local variables inside run()
without passing them as arguments.
Probably I can implement that inside Behavior
but I don't have access to localVar
.
from abc import ABCMeta, abstractmethod
class Behavior:
__metaclass__ = ABCMeta
@abstractmethod
def run(self):
pass
def f(self):
print(self.data*localVar)
class Behavior1(Behavior):
def __init__(self, data):
self.data = data
def run(self):
def f1():
print(self.data*localVar)
localVar = 1.
f1()
self.f()
class Behavior2(Behavior):
def __init__(self, data):
self.data = data
def run(self):
def f1():
print(self.data*localVar)
localVar = 2.
f1()
self.f()
class Behavior3(Behavior):
def __init__(self, data):
self.data = data
def run(self):
def f1():
print(self.data*localVar)
localVar = 3
f1()
self.f()
Is there any pythonic or OOP way of writting a C-Style macro for f1()
?