【问题标题】:should a return variable of a class method be stored in the class itself or not?类方法的返回变量是否应该存储在类本身中?
【发布时间】:2017-09-23 16:51:38
【问题描述】:

这个问题的答案可能取决于具体情况,但由于我对此没有聪明的想法,所以我认为将其发布在这里会很好。

假设我们有一个像下面这样的类。代码使用 Python,但也可以使用任何其他 OO 语言。

class Dashboard():
def __init__(self, length_dashboard):
    self.length = length_dashboard

# create dashboard with month codes
def create_dashboard(self):
    db = ['']*self.length
    db[0] = foo()
    for item in range(1, self.length-1):
        db[item] = bar(item-1)
    return db

这是好的编码风格吗?还是将返回值锁定在实例的某个变量中更好?:

class Dashboard():
def __init__(self, length_dashboard):
    self.length = length_dashboard
    self.db

# create dashboard with month codes
def create_dashboard(self):
    self.db = ['']*self.length
    self.db[0] = foo()
    for item in range(1, self.length-1):
        self.db[item] = bar(item-1)
    return self.db

【问题讨论】:

  • 我认为这更多地与应该将其设为实例字段有关,而不是与返回有关。回归对这个问题有什么意义吗?
  • 不,问题是变量是否应该是类变量..
  • 请修正缩进。
  • @Svalbard 我认为没有明确的答案,或者至少部分基于意见。不过,再次查看您的代码,db 对象似乎是Database 类的全部要点。如果db 不是实例字段,那么您的整个Database 类似乎只是一个包装了产生dbs 的工厂方法的类。 create_dashboard 也可能是一个松散的功能。如果您确实将其设为实例字段,则最好将该方法设为构造函数,除非您需要延迟对象的创建。
  • 哦,我同意。这个类定义没有多大意义——我已经从示例中删除了其他类方法。

标签: python oop object scope coding-style


【解决方案1】:

我猜这个问题真的只是在问,我应该把db 设为一个类变量吗?

在这种特定情况下,我认为您应该这样做。您的课程名为Dashboard,因此它可能代表某种仪表板。将仪表板显示在对象内部的数据(对象状态的一部分)存储起来是有意义的,对吧?

另外,我认为您应该在__init__ 中调用create_dashboard,因为当您初始化Dashboard 时,您会期望它填充一些默认数据,对吧?

如果db 不是类变量,那么您的类名称将是“DashboardCreator”,因为它所做的只是创建可以显示特定大小数据的仪表板。

【讨论】:

  • 谢谢。我只是想与优秀的编码人员进行一些讨论,这会有所帮助。
  • @Svalbard 如果您认为我的回答对您有帮助,请考虑接受!
猜你喜欢
  • 2021-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-12
  • 2012-06-16
  • 2020-05-07
  • 2021-09-21
相关资源
最近更新 更多