我是OOP和python的新手,我只是想知道我所做的事情是否在OOP中是“允许的”,以及我所做的事情是否有名字。我有排队课
all_postcodes = Queue()
。queue类有一个方法大小来查看其中有多少元素。你知道吗
class Queue:
def __init__(self):
self.__items=[]
def size(self):
return len(self.__items)
我还有另一个类接受队列实例。你知道吗
class something:
def __init__(self,postcode):
self.postcode = postcode
self._original_matrix = numpy.zeros((self.postcode.size(), self.postcode.size())))
然后我把这个类称为:
all_postcodes_matrix = something(all_postcodes)
是否允许将一个类的实例作为另一个类的参数,并使用它的方法?如果是的话,我在做什么有名字吗?你知道吗
您可以使用Python's magic methods,特别是
__len__.
,您可以使用这个神奇的方法直接在类实例上调用len()
。你知道吗这不仅是允许的,而且基本上是您希望首先使用OO的主要原因:设计一个新类型
Queue
,其行为类似于内置类型。你知道吗考虑一下
int
。一个int
有一些你不知道或不关心的内部状态。1你关心的是,在某种程度上,它表示一个整数值,并且它提供了对该表示有意义的操作。如果将int2
和3
和print
相加,则得到输出5
。你知道吗这正是你对
Queue
所做的。就外界所感兴趣的而言,它以某种方式表示一个项目队列,只要它提供了始终如一的有意义的操作,比如您的size
。你知道吗因此,现在
something
可以使用Queue
实例作为其属性之一,与使用int
的方式完全相同。你知道吗唯一的问题是你可能想用
_items
而不是__items
作为你的私有列表。在Python中,这两个名称都是“按约定私有的”,但是__items
走得更远,并且会损坏名称,使得从外部使用它稍微困难一些。这对于保护没有帮助,但是对于避免意外冲突非常有用,特别是在子类或超类意外使用相同名称的情况下。因此,通过使用__items
,您发出的信号是您期望Queue
成为继承层次结构的一部分,子类由不知道如何实现Queue
的人编写。如果那不是真的,最好不要发出信号。你知道吗1。在CPython中,它是一个由30位
int32
数字组成的链表,第一个有符号,其余的无符号。看,我告诉过你你不知道也不关心它。相关问题 更多 >
编程相关推荐