<blockquote>
<p><strong>Commen</strong>: How would I from the text file know which object to instantiate,</p>
</blockquote>
<p>添加以下内容:</p>
<pre><code>class FigureFactory:
def __new__(cls, args, **kwargs):
# Mapping Type Keywords to real Class Definition
figures = {('list',): FigureList,
('random', 'all'): FigureRandomAll,
('random', 'selection'): FigureRandomSelection
}
figure = figures.get(args)
if not figure:
figure = Figure
return figure(*kwargs['kwargs'])
</code></pre>
<p>扩展以下内容:</p>
<pre><code>class Figure:
...
@property
def out_list(self):
return "Invalid Type"
def __str__(self):
return '{} df={}'.format(self.__class__.__name__, self.df)
class FigureRandom(Figure):
...
def __str__(self):
return '{} n_value={}'.format(super().__str__(), self.n_value)
</code></pre>
<blockquote>
<p>Usage: <strong>Note</strong>: Invalid Type <code>list all</code>!</p>
</blockquote>
<pre><code>if __name__ == '__main__':
...
for cfg in [(('list',), (df,)),
(('random', 'all'), (df, n_points)),
(('random', 'selection'), (df, n_accepted + 1)),
(('list', 'all'), (df,))]:
figure = FigureFactory(args=cfg[0], kwargs=cfg[1])
print('{} {}'.format(figure, figure.out_list))
</code></pre>
<blockquote>
<p><strong>Output</strong>:</p>
<pre><code>FigureList df=None figure type is list
FigureRandomAll df=None n_value=1 figure type is random and randomtype is all
FigureRandomSelection df=None n_value=2 figure type is random and randomtype is selection
Figure df=None Invalid Type
</code></pre>
</blockquote>
<hr/>
<blockquote>
<p><strong>Question</strong>: refactor nested if statements into classes in python</p>
</blockquote>
<pre><code>class Figure:
def __init__(self, df):
self.df = df
@property
def out_list(self):
return None
class FigureList(Figure):
def __init__(self, df):
super().__init__(df)
@property
def out_list(self):
return 'figure type is list'
class FigureRandom(Figure):
def __init__(self, df, n_value):
super().__init__(df)
self.n_value = n_value
class FigureRandomAll(FigureRandom):
def __init__(self, df, n_points):
super().__init__(df, n_points)
@property
def out_list(self):
return 'figure type is random and randomtype is all'
class FigureRandomSelection(FigureRandom):
def __init__(self, df, n_accepted):
super().__init__(df, n_accepted)
@property
def out_list(self):
return 'figure type is random and randomtype is selection'
</code></pre>
<blockquote>
<p>Usage:</p>
</blockquote>
<pre><code>if __name__ == '__main__':
df = None
n_points = 1
n_accepted = 1
for figure in [FigureList(df), FigureRandomAll(df, n_points), FigureRandomSelection(df, n_accepted)]:
print('{}'.format(figure.out_list))
</code></pre>
<blockquote>
<p><strong>Output</strong>:</p>
<pre><code>figure type is list
figure type is random and randomtype is all
figure type is random and randomtype is selection
</code></pre>
</blockquote>