基本上我有一个接收3个变量的进程类。 process
如姓名,时间和身份。
我将process
放入准备好的queue
,然后在另一个类中,我将readyqueue
中的第一个对象放入self.__ current
。通常当我把对象放入变量例如。 current = process('hi', 6, False)
。我可以说current._process.__time
并返回>>> 6.
任何人都可以解释我如何使用self.__current
执行此操作。
class Process:
def __init__(self,process,time,io = False):
self.__process = process
self.__time = time
self.__io = io
class cpu(Queue):
def __init__(self):
self.timequantum = 1
self.__current = []
答案 0 :(得分:1)
您遇到的问题是因为您正在使用以两个下划线开始(并且不结束)的属性名称。当您在方法中执行此操作时,它会调用Python的“名称修改”功能,该功能会将__process
之类的名称转换为_Process__process
。这使得从其他代码访问变得很尴尬。
名称修改系统的目的是允许mixin类为可能具有任意数量的其他属性的对象分配属性。由于修改添加了使用该属性的类的名称(而不是对象类的名称),因此mixin-author可以相当确信没有其他类会意外地使用相同的属性名称。
您可能不希望名称损坏,因此不应在属性名称的开头使用__
。如果您希望属性为“私有”,请使用单个下划线,表示该属性不是该类的公共API的一部分。这是一个约定,因此对于调试或测试,如果需要,您仍然可以访问_
前缀属性。
或者如果您希望其他代码使用这些属性,只需使用裸名称即可。在Python中,将公共属性作为对象API的一部分是完全可以接受的。 (其他编程语言不鼓励这样做,但在Python中,如果需要,可以使用property
重新实现带有getter和setter函数的属性API。)