显示已放入自变量

时间:2016-02-11 11:18:34

标签: python

基本上我有一个接收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 = []

1 个答案:

答案 0 :(得分:1)

您遇到的问题是因为您正在使用以两个下划线开始(并且不结束)的属性名称。当您在方法中执行此操作时,它会调用Python的“名称修改”功能,该功能会将__process之类的名称转换为_Process__process。这使得从其他代码访问变得很尴尬。

名称修改系统的目的是允许mixin类为可能具有任意数量的其他属性的对象分配属性。由于修改添加了使用该属性的类的名称(而不是对象类的名称),因此mixin-author可以相当确信没有其他类会意外地使用相同的属性名称。

您可能不希望名称损坏,因此不应在属性名称的开头使用__。如果您希望属性为“私有”,请使用单个下划线,表示该属性不是该类的公共API的一部分。这是一个约定,因此对于调试或测试,如果需要,您仍然可以访问_前缀属性。

或者如果您希望其他代码使用这些属性,只需使用裸名称即可。在Python中,将公共属性作为对象API的一部分是完全可以接受的。 (其他编程语言不鼓励这样做,但在Python中,如果需要,可以使用property重新实现带有getter和setter函数的属性API。)