Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.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,谈到面向对象编程,我非常业余,自学使用python 我主要关心的是将概念或实体分解成对象 例如,我刚刚编写了一些代码来控制连接到我的raspberry pi的交通灯系统 该系统包括: 一辆汽车亮起交通灯(红、黄、绿) 请求交叉的按钮 还有绿灯和红灯,告诉行人什么时候过马路 现在,我将代码建模为一个完整的类。其中,对象中的方法调用对象中的其他方法。例如,当对象被初始化时,initialize方法调用“等待按钮按下”方法,当检测到按钮按下时,该方法调用“通过光序列运行”方法 这是坏习惯吗?每个概

谈到面向对象编程,我非常业余,自学使用python

我主要关心的是将概念或实体分解成对象

例如,我刚刚编写了一些代码来控制连接到我的raspberry pi的交通灯系统

该系统包括:

  • 一辆汽车亮起交通灯(红、黄、绿)
  • 请求交叉的按钮
  • 还有绿灯和红灯,告诉行人什么时候过马路
现在,我将代码建模为一个完整的类。其中,对象中的方法调用对象中的其他方法。例如,当对象被初始化时,initialize方法调用“等待按钮按下”方法,当检测到按钮按下时,该方法调用“通过光序列运行”方法

这是坏习惯吗?每个概念/实体是否应为单独的类/对象,例如交通灯对象、按钮对象、行人灯对象

对不起,这个问题太开放了


感谢您的帮助。

您当前拥有的内容违反了标准。基本上你们班做的太多了

您可以执行以下操作:

对汽车交通灯、行人交通灯和请求开始穿越的按钮进行单独分类

之后,可以将button类注入到行人灯类中。并将汽车和行人类都注入到“控制”/“管理”类中,这些类用于管理灯光

在此之后,您甚至可以进一步抽象它,例如将实际灯光注入trafficlights类


您可能还想了解其他人。

您当前拥有的内容违反了。基本上你们班做的太多了

您可以执行以下操作:

对汽车交通灯、行人交通灯和请求开始穿越的按钮进行单独分类

之后,可以将button类注入到行人灯类中。并将汽车和行人类都注入到“控制”/“管理”类中,这些类用于管理灯光

在此之后,您甚至可以进一步抽象它,例如将实际灯光注入trafficlights类


您可能还想了解其他人。

您应该在codereview:中发布此答案和代码。一般来说,我会说分解为不同的对象。尝试至少区分用于与其他实体(对象)交互的方法和用于初始化或设置的方法。考虑一下界面,试着以自然的方式分解你的东西。但无论如何,不要过度设计简单的问题,而是慢慢向面向对象的实践发展。拥有一个巨大的类只是在面向对象的外表下编写过程代码。所以,你应该把问题分解成更小的实体。谢谢你的回复。将实体分解为对象时应该走多远?例如,以我为例,每个LED的对象是否会走得太远?取决于LED的复杂性,但一般来说,是的,为LED创建一个有意义的接口,并让交通灯聚合它们。这将极大地改变您处理实体的方式,迫使您创建干净的接口,并将实体行为与实现细节分离。任何类只需要知道LED可以做什么,而不需要知道它是如何完成的。您应该在codereview中发布此答案,并附上代码:。一般来说,我会说分解为不同的对象。尝试至少区分用于与其他实体(对象)交互的方法和用于初始化或设置的方法。考虑一下界面,试着以自然的方式分解你的东西。但无论如何,不要过度设计简单的问题,而是慢慢向面向对象的实践发展。拥有一个巨大的类只是在面向对象的外表下编写过程代码。所以,你应该把问题分解成更小的实体。谢谢你的回复。将实体分解为对象时应该走多远?例如,以我为例,每个LED的对象是否会走得太远?取决于LED的复杂性,但一般来说,是的,为LED创建一个有意义的接口,并让交通灯聚合它们。这将极大地改变您处理实体的方式,迫使您创建干净的接口,并将实体行为与实现细节分离。任何一个班级只需要知道LED能做什么,而不需要知道它是如何做的。谢谢你的回答,那些坚实的原则看起来真的很有趣。虽然还不知道注射是什么或它是如何工作的。@Cornucopia看这::)谢谢你的帮助,非常感谢。这些链接和你自己教会了我很多。谢谢你的回复,那些坚实的原则看起来真的很有趣。虽然还不知道注射是什么或它是如何工作的。@Cornucopia看这::)谢谢你的帮助,非常感谢。链接和你自己教会了我很多。