关于在Python中创建类的必要性

关于在Python中创建类的必要性,python,class,oop,Python,Class,Oop,假设我有一个Python模块来控制视频会议系统。在这个模块中,我有一些全局变量和函数来控制视频会议、通话、电话簿等的状态 为了启动控制系统,模块自行执行初始化视频会议的功能(以太网连接、轮询状态等) 现在,如果我需要开始控制第二个视频会议系统,我不知道如何解决这个问题:我考虑将视频会议模块设为一个类,创建两个实例(每个视频会议系统一个),然后初始化这两个实例,但问题是我不需要有两个视频会议类的实例,因为我不会对这些对象做任何事情,因为我只需要初始化系统;在那之后,我不需要再打电话给他们,也不需要

假设我有一个Python模块来控制视频会议系统。在这个模块中,我有一些全局变量和函数来控制视频会议、通话、电话簿等的状态

为了启动控制系统,模块自行执行初始化视频会议的功能(以太网连接、轮询状态等)

现在,如果我需要开始控制第二个视频会议系统,我不知道如何解决这个问题:我考虑将视频会议模块设为一个类,创建两个实例(每个视频会议系统一个),然后初始化这两个实例,但问题是我不需要有两个视频会议类的实例,因为我不会对这些对象做任何事情,因为我只需要初始化系统;在那之后,我不需要再打电话给他们,也不需要留着他们做任何其他事情

示例代码:

视频会议.py

class Videoconference:
    def __init__(self):
        self.state = 0
        #Initialization code
Main.py

from Videoconference import Videoconference

vidC1 = Videoconference()
vidC2 = Videoconference()
#vidC1 and vidC2 will never be use again

因此,问题是:我是否应该将视频会议模块转换为一个类并创建实例(如示例中所示),即使我不打算将它们用于初始化过程的任何其他方面?或者有没有其他不创建类的解决方案?

这听起来像是
VideoConferenceSystem
对象的完美用例。你说你有全局变量(ew!)来控制状态(恶心!)并调用函数来控制


听起来你有机会把这些都转换成一个对象,这个对象有保存状态的属性和改变状态的方法。听起来您应该重构的不仅仅是初始化代码,因此那些
vidC1
vidC2
对象非常有用。

这听起来像是
VideoConferenceSystem
对象的完美用例。你说你有全局变量(ew!)来控制状态(恶心!)并调用函数来控制


听起来你有机会把这些都转换成一个对象,这个对象有保存状态的属性和改变状态的方法。听起来你应该重构的不仅仅是初始化代码,所以那些
vidC1
vidC2
对象是有用的。

也许这是一个偏好问题,但我认为在上述情况下使用类会更安全。通常我会编写一个函数,当它变得太复杂时,我会认为我应该创建一个类(并且经常这样做),但我从来没有创建过一个太简单的类,并且认为这太容易了,为什么我不创建一个函数呢

即使只有一个对象而不是两个对象,创建类通常也有助于提高可读性。例如:

vid = VideoConference()
# vid.initialize_old_system() # Suppose you have an old system that you no longer use
                              # But want to keep its method for reference
vid.initialize_new_system()
vid.view_call_history(since=yesterday)

也许这是一个偏好的问题,但我认为在上述情况下拥有一个类将是更安全的赌注。通常我会编写一个函数,当它变得太复杂时,我会认为我应该创建一个类(并且经常这样做),但我从来没有创建过一个太简单的类,并且认为这太容易了,为什么我不创建一个函数呢

即使只有一个对象而不是两个对象,创建类通常也有助于提高可读性。例如:

vid = VideoConference()
# vid.initialize_old_system() # Suppose you have an old system that you no longer use
                              # But want to keep its method for reference
vid.initialize_new_system()
vid.view_call_history(since=yesterday)

我认为你在你的例子中正确地处理了这个问题。通过这种方式,您可以有多个视频会议,每个视频会议可能具有不同的属性状态(例如vidC1.conference\u duration等)。

我认为您在示例中正确处理了这个问题。这样,您可以有多个视频会议,每个视频会议可能具有不同的属性状态(例如vidC1.conference\u duration等)。

将初始化代码包装在函数中并调用两次?将初始化代码包装在函数中并调用两次?我同意@Adam smith,核心问题是您的代码当前使用全局状态。不要使用VideoConference类初始化全局条,而是将与视频系统相关的所有状态存储在该类的实例中。我同意@Adam smith的观点,核心问题是您的代码当前使用全局状态。不要使用VideoConference类初始化全局条,而是将与视频系统相关的所有状态存储在该类的实例中。