我是否违反OOP基础规则?Python新手的OOP实现问询
关于OOP规范与实现模式的解答
嘿,作为刚接触OOP和Python的新手,你的实现已经踩对不少OOP的关键点啦!我来帮你拆解一下:
1. Queue类的分析
先看你定义的Queue类:
class Queue: def __init__(self): self.__items=[] def size(self): return len(self.__items)
- 符合OOP规范的点:你用双下划线的
__items把内部存储的列表私有化,只对外暴露size()方法获取队列长度,这完美契合了OOP的封装原则——把内部状态隐藏起来,只提供必要的操作接口,避免外部直接修改内部数据导致逻辑混乱。 - 实现的名称:这就是标准的**队列(Queue)抽象数据类型(ADT)**的基础实现,基于Python列表存储元素。不过通常队列还会包含
enqueue()(入队)、dequeue()(出队)这类核心方法,你当前版本只实现了size(),但现有部分的设计完全符合队列ADT的思路,没有特殊的设计模式名称,就是最基础的队列实现。
2. something类的分析
再看接收Queue实例的something类:
class something: def __init__(self,postcode): self.postcode = postcode self._original_matrix = numpy.zeros(...)
- 符合OOP规范的点:你通过构造函数接收外部传入的
Queue实例(这里参数名postcode应该指代传入的Queue对象吧?),并将其保存为实例属性,这是OOP里依赖注入的思路——类不自行创建依赖对象,而是由外部传入,能降低类之间的耦合度,让代码更灵活(比如后续可以传入不同的队列实现,只要接口兼容即可)。 - 小建议:按照Python的PEP8编码规范,类名应该使用大驼峰命名法,也就是把
something改成Something,这样代码的可读性会更好。
内容的提问来源于stack exchange,提问作者Uchoud1
相关产品推荐
相关产品推荐

