我是否必须将变量声称为全局变量才能在类之外使用它们?

时间:2016-01-05 10:56:17

标签: python python-3.x global-variables

似乎这是我弄清楚如何能够仅从类中提取变量的唯一方法 - 在不同的类中使用def而不需要在类中调用变量的所有打印和函数。我是对的还是有另一种更简单的方法?

class MessageType:
    def process_msg1(self,data)
        item1 = []
        item2 = []
        item3 = []

        item1.append(float(stuff)*stuff)
        item2.append(float(stuff)*stuff)
        item2.append(float(stuff)*stuff)
        print('printing and plotting stuff')

        return(array(item1), array(item2), array(item3))

class PrintMSG(MessageType):
    def process_msg1(self, data):
        (i1, i2, i3) = messagetype.process_msg1(data)
        print('printing plus plotting using variables from class Message')

#processing piece
keep_asking = True
while keep_asking:
    command_type = input("What message type do you want to look at?")
    if command_type == 'msg type1':
        msg = MessageType()
        print_msg = PrintMSG()
        messagetype.process_msg1(self,data)
        print_msg.process_msg1(data)
    elif:
        print('other stuff')
    wannalook = input('Want to look at another message or no?')
    if not wannalook.startswith('y'):
        keep_asking = False

我遇到的问题是我有一个项目需要从其他类中的其他类调用变量。我有几个其他类的全局变量,但我的问题是(i1, i2, i3) = messagetype.process_msg1(data)再次运行整个类-def而不是只是调用数组变量。有没有办法在#processing piece我已经调用该类-def的情况下调用它们?

参考之前发布的问题here

1 个答案:

答案 0 :(得分:3)

类应该是自包含的代码和数据单元。有几个具有多个全局变量的类表明你几乎肯定做错了。

应该比单个方法调用持续更长时间的类数据,无论是在内部使用还是在其他代码中公开,都应该保存到self。因此,item1item2item3应该在__init__方法中进行初始化,然后process_msg1应该更新它们而不进行初始化。像这样:

class MessageType:

    def __init__(self):
        self.item1 = []
        self.item2 = []
        self.item3 = []

    def process_msg1(self, data)
        self.item1.append(float(stuff) * stuff)
        self.item2.append(float(stuff) * stuff)
        self.item2.append(float(stuff) * stuff)
        print('printing and plotting stuff')
        return(array(self.item1), array(self.item2), array(self.item3))

然后,一旦您创建了一个实例(message_type = MessageType())并调用process_msg1方法(message_type.process_msg1(1.0, 2.3, 3.14159)),其他代码就可以message_type.item1等方式访问它。