Python类初始化-属性内存

Python类初始化-属性内存,python,class,initialization,Python,Class,Initialization,所以我用Python编写了一个程序,它将把我所有的大学课程(来自csv)都打印出来。我写了一个简单的类主题来更好地管理一切。在我的大学里有偶数周、奇数周和每周的课程,我有讲座、练习和实验室。所以我的课程是这样的: class Subject: number = 0 name = "" dummyData = [] even = {} odd = {} all = {} type = "" def __init__(self, nam

所以我用Python编写了一个程序,它将把我所有的大学课程(来自csv)都打印出来。我写了一个简单的类
主题
来更好地管理一切。在我的大学里有偶数周、奇数周和每周的课程,我有讲座、练习和实验室。所以我的课程是这样的:

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
even = {"mon":"",
                "tue":"",
                "wed":"",
                "thu":"",
                "fri":"",
        }
以前我用
偶数
奇数
,和
全部
写了所有的日子,像这样:

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
even = {"mon":"",
                "tue":"",
                "wed":"",
                "thu":"",
                "fri":"",
        }
所以我可以把所有的课时加在特定的日期键上。但是,有一个问题。例如,让我们假设编程讲座是主题1,编程实验室是主题2。科目1在周一9:15。科目2也在周一,但在17:05。所以我有一个函数,它可以检查主题是在偶数周还是在奇数周。然后我将f.e 9.15分配给主题1的
偶数[“mon”]
。然后我会选择主题2,并尝试将17.05添加到
偶数[“mon”]
。每个主题都是存储在列表中的另一个主题类对象。但是有一个错误。当我试图将17.05添加到subject 2s
偶数[“mon”]
时,它添加了它,好吧,但是
偶数[“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
致:


+真奇怪。那么为什么Python会像记住第一个对象属性中写入了什么一样呢?

您需要在
\uuuu init\uuu
方法中声明属性。这里有一个例子

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

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

您需要在
\uuuuuu init\uuuu
方法中声明属性。这里有一个例子

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

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

那么,在init方法之上创建属性是一种不好的做法吗?是的,您不需要这样做,除非您希望这些变量在类的所有实例之间共享。那么,在init方法之上创建属性是一种糟糕的做法吗?是的,您不需要这样做,除非您希望这些变量在类的所有实例之间共享。