gpt4 book ai didi

python - 返回变量和分配属性

转载 作者:太空宇宙 更新时间:2023-11-04 00:56:03 26 4
gpt4 key购买 nike

我从未接受过正式的 OOP 指导,只是在 Python 的基础知识上跌跌撞撞,但我正处于十字路口。在处理实例化的类对象时,是通过方法分配属性更好,还是让方法只返回值更好?我读过很多关于不要让对象的状态失控的文章,但无法找出最好的方法。这是一个简单的例子:

import magic
class Histogram():
def __init__(self,directory):
self.directory = directory

# Data Option 1
def read_data(self):
data = []
file_ref = open(self.directory,'r')
line = file_ref.readline()
while line:
data.append(line)
line = file_ref.readline()
return data

# Data Option 2
def set_data(self):
data = []
file_ref = open(self.directory,'r')
line = file_ref.readline()
while line:
data.append(line)
line = file_ref.readline()
self.data = data



# Hist Option 1
def build_histogram(self):
data = self.read_data()

# It's not important what magic.histogram does.
self.histogram = magic.histogram(data)

# Hist Option 2
def get_histogram(self,data):
return magic.histogram(data)

# Hist Option 3 - this requires self.get_data() to have already run.
def build_histogram_2(self):
self.histogram = magic.histogram(self.data)

因此数据选项 1 强制用户要么调用它并将其存储在某处以与 Hist 选项 2 结合使用,要么将其存储在 self.data 中以与 Hist 选项 3 一起使用。数据选项 2 允许您使用 Hist 选项 3,但您仍然必须已经运行 set_data。

所以我真正的问题是,对于一个有方法来做不同事情的类,通常可以但不必链接在一起,我应该怎么写呢?隐式设置属性并冒使状态困惑的风险?返回变量并让“用户”设置它们?是否为我的方法使用的属性设置了 getter,如果属性不存在,则以某种方式处理它?<​​/p>

如果您需要更好的解释、其他示例或其他内容,请告诉我。

最佳答案

问这个物体代表什么。该数据是否合理地属于对象本身?

在这种情况下,我会说是。您的数据选项 2 正在加载合理地“属于”直方图对象的数据——尽管有理由认为构造函数应该只加载它而不需要单独的方法调用来完成它。

此外,如果你走另一条路,这不是真正的对象;您只是在使用对象框架来收集一些相关的子例程。

关于python - 返回变量和分配属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35086237/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com