【发布时间】:2019-12-15 04:33:26
【问题描述】:
我试图理解为什么在处理数据操作时我们会在 Python 中使用类而不是函数。我不明白一个类如何帮助我处理数据操作管道。
我想用下面的虚拟代码来说明。
Class foo():
def one(self):
''' loads data and does something meaningful'''
self.x = 'eee'
return self.x
def two(self):
'''adds to meaningful data'''
self.y = self.x + 'fff'
return self.y
def three(self):
'''third process in data pipeline'''
self.z = self.y + 'ggg'
return self.z
要使用第三种方法three(),我必须调用所有其他方法,否则我在two() 和one() 中设置的实例变量未设置。
instance = foo()
instance.one()
instance.two()
var = instance.three()
print(var)
>>> 'eeefffggg'
还有其他方法可以让我的第三个方法three() 使用前两个中设置的变量吗?为什么这比我只需要一行的函数式编程(见下文)更有用?我是否应该以与下面相同的方式在我的类中调用方法one() 和two()?
def one():
return 'eee'
def two():
x = one()
return x + 'fff'
def three()
x = two()
return x + 'ggg'
print(three())
>>> 'eeefffggg'
如何在一个类中构建数据操作管道,我只需调用一个方法three(),它会自动调用其他两种方法,如果我愿意,我可以随时检查步骤并查看方法的输出一和二通过打电话给他们?这没有用吗,我是不是想错了?
【问题讨论】:
-
在
__init__中做一个和两个的工作怎么样? docs.python.org/3.7/tutorial/classes.html#class-objects -
为什么不从
three方法调用self.two(),就像从three函数调用two()一样?但是这里的课程似乎没有任何意义。 -
除非您想将数据从一个函数隐式传递到另一个函数(通过类实例),否则函数组合在这里比 OOP 更重要。
-
这个类对OO代码的使用不好。有些问题非常适合 OO 代码,但并非所有问题都需要 OO 代码。所以......是的......如果你不需要它,不要。
-
也许组织你的代码,以便它现在和五年后对你有意义。如果您使用该类进行组合,则可以使用模块代替,这是 Python 代码的公认做法。
标签: python class variables methods instance