我是OOP的新手,正在编写一个Python小工具,使用来自网络Bitcoin() class
的JSON负载检查比特币价格,监控价格Monitor()
,在达到阈值时通知用户Notify()
并且现在使用控制台界面Interface()
来执行此操作。
我创建了一个Bitcoin()
类,可以从JSON加载中读取价格和数量。 __init__
定义使用套接字连接到Web。由于这个类的每个实例都会产生一个新的套接字,我只需要/想要运行这个类的一个实例。
Bitcoin()
实例进行交互的最佳方法是什么?Bitcoin()
个实例吗?将实例作为参数传递给需要它的每个类? 答案 0 :(得分:2)
首先关注我的是SRP违规行为,您的Bitcoin
课程可能不应该对此负责:
我不知道细节,但从我的观点来看,你应该将该功能拆分为较小的类/功能(如果只使用模块),其中一个将负责从网络检索数据。还请记住,全球国家是邪恶的(在某些情况下,单身人士可以被描述为全球国家)。
从我的观点来看,另一件事就是在构造函数中打开一个套接字。这是不可测试的,当然你可以模拟/存根套接字,但从我的观点来看,当类需要它的所有依赖项作为构造函数参数时它会更好。通过这样做你也可以注意到一些具有广泛责任的类(如果你的构造函数需要更多的3,4参数,它肯定可以简化)。
答案 1 :(得分:1)
http://www.youtube.com/watch?v=o9pEzgHorH0
我不确定这个视频对你的项目有多相关(没有实际阅读的代码)。但也许你会找到问题的答案。至少你会学到一些新的东西,而这正是这里的。
答案 2 :(得分:1)
如果我是你,我的代码会是这样的:
(每组工作的一个班级,这不是你在做什么)
class Interface:
''' Handle UI '''
...
class Connect:
''' Handle web interface '''
...
class Bitcoin:
''' Handle the calculations '''
...
class Notify:
''' Notifier '''
...
简而言之,将您的班级拆分为更简单的小类。
现在提问:
注意:在类的构造函数中打开套接字不是一个好主意。如果你在方法中使用它可能会更好。
答案 3 :(得分:0)
答案可能是。取决于你整个建筑, 你应该看一下单身模式,因为你的描述会让Allton全面吼叫。
http://de.wikipedia.org/wiki/Singleton_%28Entwurfsmuster%29
如果你没有找到任何反对在给定架构中创建课程的正当理由,那就去吧。
答案 4 :(得分:0)
OOP是一种工具,不是目标,您可以决定是否使用它。如果您使用Python模块,则无需编写“class”即可实现封装。
答案 5 :(得分:0)
当然,您可以使用python类来实现此目的。您也可以使用模块级实例(不需要全局关键字或显式传递作为参数)。这是一个品味恕我直言。
基本上你问的是关于Singleton模式特定于python的实现,它已在这里得到解答: Python and the Singleton Pattern
模式描述本身可以在这里找到:http://en.wikipedia.org/wiki/Singleton_pattern