Reputation: 40
I am trying to pass the data_lst up to Class:'Paper''s function: 'save' such that I can print it from there. The structure is fixed and I am not allowed to used global variables. How do i get around this?
class Paper:
def __init__(self):
pass
def add_page(self, **kwargs):
self.p = 1
self.pp = 5
page = Page(self.p, self.pp, paper=self)
return page
def save(self, **kwargs):
#This is where i want to print the data from get_data
print('final price =', data_lst)
class Page:
def __init__(self, p, pp, paper=False):
self.paper = paper
self.p = p
self.pp = pp
assert paper
def add_fig(self):
fig = Figure(p=self.p, pp=self.pp)
return fig
class Figure:
def __init__(self, p=0, pp=0):
self.p = p
self.pp = pp
data_lst = self.get_data()
def get_data(self):
### get some data in a list
data_lst = [self.p for x in range(self.pp)]
return data_lst
paper = Paper()
page1 = paper.add_page()
page1.add_fig()
#paper.save() this call needs to print the data
Upvotes: 2
Views: 66
Reputation: 909
I modified your code a little. This is just a suggestion.
I changed the fact that the page is returned when calling the add_page method. Instead I store it in the Paper object. Same for the figure.
class Paper:
def __init__(self):
self.page = None
def add_page(self):
p = 1
pp = 5
self.page = Page(p, pp, paper=self)
def save(self):
#This is where i want to print the data from get_data
print(f"final price ={the_paper.page.fig.data_lst}")
class Page:
def __init__(self, p, pp, paper):
self.paper = paper
self.p = p
self.pp = pp
self.fig = None
def add_fig(self):
self.fig = Figure(p=self.p, pp=self.pp)
class Figure:
def __init__(self, p=0, pp=0):
self.p = p
self.pp = pp
self.data_lst = self.get_data()
def get_data(self):
### get some data in a list
data_lst = [self.p for x in range(self.pp)]
return data_lst
the_paper = Paper()
the_paper.add_page()
the_paper.page.add_fig()
the_paper.save()
NB: I removed assert for paper, since assert is not necessarily executed in production context. If you consider that paper is mandatory, then it is better to have remove its default value.
Upvotes: 1
Reputation: 1501
You should use paper.save(data_lst=...)
or change save signature to allow data_lst as a positional argument def save(self, data_lst, **kwargs):
Upvotes: 0