我想以一种允许我定义可以根据其目的进行分类的方法来组织我的代码。我的解决方案以下列方式使用子类:
import matplotlib.pyplot as plt
class Portfolio:
def __init__(self):
self.x = [1,2,3]
self.y = [4,6,2]
class Plotting:
def red(x_value,y_value):
plt.scatter(x=x_value,y=y_value,color="red")
plt.show()
def green(x_value,y_value):
plt.scatter(x=x_value,y=y_value,color="green")
plt.show()
class Analysis:
def min_max_x(x_value):
print([min(x_value),max(x_value)])
def min_max_y(y_value):
print([min(y_value), max(y_value)])
# Creates Portfolio object
pf = Portfolio()
# Plotting
pf.Plotting.red(x_value=pf.x,y_value=pf.y)
pf.Plotting.green(x_value=pf.x,y_value=pf.y)
# Analysis
pf.Analysis.min_max_x(x_value=pf.x)
pf.Analysis.min_max_y(y_value=pf.y)
尽管这有效,但由于以下原因,我并不满意:
所以,我的问题是:我们如何构建一个具有以主题方式组织的方法的类(例如绘图,分析等),就像在我的示例中一样,但不必传递参数。非常感谢。
答案 0 :(得分:0)
您的想法是,您使用有关投资组合的信息创建实例化类:
import matplotlib.pyplot as plt
class Plotting:
def __init__(self, portfolio):
self.portfolio = portfolio
def red(self):
plt.scatter(x=self.portfolio.x, y=self.portfolio.y, color="red")
plt.show()
def green(self):
plt.scatter(x=self.portfolio.x, y=self.portfolio.y, color="green")
plt.show()
class Analysis:
def __init__(self, portfolio):
self.portfolio = portfolio
def min_max_x(self):
print([min(self.portfolio.x), max(self.portfolio.x)])
def min_max_y(self):
print([min(self.portfolio.y), max(self.portfolio.y)])
class Portfolio:
def __init__(self):
self.x = [1, 2, 3]
self.y = [4, 6, 2]
self.plotting = Plotting(self)
self.analysis = Analysis(self)
# Creates Portfolio object
pf = Portfolio()
# Plotting
pf.plotting.red()
pf.plotting.green()
# Analysis
pf.analysis.min_max_x()
pf.analysis.min_max_y()