我有一个风格问题。 使用“管理器对象”的引用来管理对象之间的共享变量是不是一个坏主意?
class Profile_Line:
def __init__(self, parent, line):
self.parent = parent
self.line = line
def get_results(self):
image = self.parent.image # Is this a good idea?
profile_line = self.get_profile_line(image, self.line)
return profile_line
def get_profile_line(self,img,line):
return [1,2,3,4] #not real function
class Profile_Line_Manager():
def __init__(self, image):
self.image = image
self.p_lines = [] # a list of Profile Line objects
def add_profile_line(self, line):
self.p_lines.append(Profile_Line(self, line))
def get_results(self):
for pl in self.p_lines:
print(pl.get_results())
因此,有一个类Profile Line,它使用自己的参数计算一些值,并通过管理器获取图像。 所有配置文件行的图像都相同,属于同一个管理器。 因此,不能使用类变量,因为所有profile_line对象都具有相同的图像,即使它们不属于一起。
将父对象传递给属于该管理器的配置文件行对象是一个好主意吗?感觉有点奇怪。 或者有更好的方法来做到这一点,例如将两个类集成为一个。
答案 0 :(得分:0)
我认为集成类没有任何问题。您丢失的唯一内容(据我所知)是批量生成具有相同image
的实例,以及具有相同image
的所有实例的列表。为此,我建议使用一个函数:
profile_lines = []
def generate_profile_lines (image, lines):
# image will be whatever it was before, line will be a list since you (seem to) want to have multiple instances with different lines and the same image
global profile_lines
profile_lines.append ([Profile_Line (image, line) for line in lines])
您可能已经注意到,我已将image
传递给Profile_Line
。这是因为我认为您应该重新构建它以接受image
作为参数。