Python类初始化 - 属性内存

时间:2016-09-24 00:55:21

标签: python class initialization

所以我用Python编写了一个程序,它将接受我所有的大学课程(来自csv)并打印有关它们的信息。我写了一个简单的课程Subject来更好地管理一切。在我的大学里,有几周,几周和每周课程的课程,我有讲座,练习和实验室。所以我的Subject类是这样的:

class Subject:
    number = 0
    name = ""
    dummyData = []
    even = {}
    odd = {}
    all = {}
    type = ""
    def __init__(self, name, number, type):
        self.name = name
        self.number = number
        self.type = type
        self.info = str(number) + " " + name + " " + type

以前我用evenoddall来写了所有的日子,就像这样:

even = {"mon":"",
                "tue":"",
                "wed":"",
                "thu":"",
                "fri":"",
        }

所以我可以将所有课程时间添加到特定日期密钥。但是有一个问题。例如,假设编程讲座是主题1,编程实验室是主题2.主题1是星期一9.15。主题2也在星期一,但是在17.05。所以我有一个功能,可以检查主题是偶数/奇数周还是每周。然后我会将f.e 9.15分配给主题1上的even["mon"]。然后我会去主题2,并尝试将17.05添加到even["mon"]。每个主题都是存储在列表中的其他Subject类对象。但是有一个错误。当我尝试将17.05添加到主题2 even["mon"]时,它添加了它,好吧,但是even["mon"]应该="17.05",但它是="9.15/17.05"。我试图弄清楚什么是错的,我最后通过改变我的班级来做到了:

class Subject:
    number = 0
    name = ""
    dummyData = []
    even = {"mon":"",
                "tue":"",
                "wed":"",
                "thu":"",
                "fri":"",
        }
    ...etc...
    type = ""
    def __init__(self, name, number, type):
        self.name = name
        self.number = number
        self.type = type
        self.info = str(number) + " " + name + " " + type

为:

class Subject:
    number = 0
    name = ""
    dummyData = []
    even = {}
    odd = {}
    all = {}
    type = ""
    def __init__(self, name, number, type):
        self.name = name
        self.number = number
        self.type = type
        self.info = str(number) + " " + name + " " + type
        self.even = {"mon":"",
                "tue":"",
                "wed":"",
                "thu":"",
                "fri":"",
        }

+奇数和所有。那么为什么Python会记住什么是写入第一个对象属性?

1 个答案:

答案 0 :(得分:0)

您需要在__init__方法中声明属性。这是一个例子

class Subject:
    def __init__(self, name, number, type):
       self.number = number
       self.name = name
       self.dummyData = []
       self.even = {}
       self.odd = {}
       self.all = {}
       self.type = type

声明类声明中的变量使它们成为“类”成员而不是实例成员。在__init__方法中声明它们可确保每次创建对象的新实例时都会创建成员的新实例。