Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从面向对象的角度来看,拥有具有固定状态的对象有多糟糕?_Python_Oop - Fatal编程技术网

Python 从面向对象的角度来看,拥有具有固定状态的对象有多糟糕?

Python 从面向对象的角度来看,拥有具有固定状态的对象有多糟糕?,python,oop,Python,Oop,所以我对我所读到的面向对象编程有点困惑。我意识到,当我专注于每个对象只做一件事的规则时,我创建了一个没有变化状态的类 基本上,我正在编写一个程序,对文本文件进行大量的读写。我认为我所有的对象都不应该处理这些操作,我应该有一个fileIO类来为它们执行这些操作。然而,我有点担心这可能与拥有一个实用类是一样的 拥有一个字段从未更改(甚至不需要初始化)的类是否与实用程序类相同?从面向对象的角度来看,这是一种糟糕的做法吗?使用fileIO对象有意义吗?如果没有,是否应该允许对象从文件读取和写入文件 cl

所以我对我所读到的面向对象编程有点困惑。我意识到,当我专注于每个对象只做一件事的规则时,我创建了一个没有变化状态的类

基本上,我正在编写一个程序,对文本文件进行大量的读写。我认为我所有的对象都不应该处理这些操作,我应该有一个fileIO类来为它们执行这些操作。然而,我有点担心这可能与拥有一个实用类是一样的

拥有一个字段从未更改(甚至不需要初始化)的类是否与实用程序类相同?从面向对象的角度来看,这是一种糟糕的做法吗?使用fileIO对象有意义吗?如果没有,是否应该允许对象从文件读取和写入文件

class fileIO:
    __processFilePath = None
    __trackFilePath = None

    def __init__(self, iProcessFilePath, iTrackFilePath):

    def getProcesses(self):

    #checks if appString is in file
    def isAppRunning(self,appString):

    #reads all
    def getAllTrackedLines(self):

    #appends
    def addNewOnTracked(self,toBeAdded):

    #overwrites
    def overWriteTrackedLines(self,fullData):

在这个特定的实例中,我实际上是在初始化init方法中的字段。但就我的程序而言,我实际上不需要这样做,因为只有两个文件可以从中读取和写入数据。

从文件中读取和写入数据可以封装在处理数据状态的某个类中,以确保事务完成。我的意思是,无论操作结果如何,都需要适当地取消资源分配,最好是在同一事务中。如果考虑将资源分配和分配为状态,那么您的类不是完全无状态的。在函数式编程中,处理资源的函数将被认为是不纯净的,因为它不是无状态的。国家仅仅是外部的

拥有一个没有状态的类并不构成坏类。的确,实用程序类是一种反模式,但是如果您的类做了一件小事,并且做得很好,那么它就不是问题。当有大量相关方法聚集在类中,代码开始腐烂时,问题就出现了。这就是您想要避免的。一个有明确目标的类,并且只做那件事,将抵抗腐朽

确保在类周围编写大量测试,因为这是长期可维护性的关键


如果有什么我可以澄清的,请告诉我。

如果不确切知道您对文件做了什么,很难说,但是如果您只是直接处理文件,即读取->处理->写入->完成,那么您不改变状态的事实表明您根本不需要对象。只需按顺序调用函数。