2016-09-24 3 views
1

그래서 필자는 Python으로 모든 대학 수업 (csv에서)을 가져 와서 그들에 대한 정보를 인쇄하는 프로그램을 작성했습니다. 나는 모든 것을 더 잘 관리하기 위해 간단한 클래스 Subject을 썼다. 내 유니에서는 ​​심지어 수주, 홀수 주, 매주 수업이 있으며 강의, 연습 및 실험실이 있습니다. 그래서 내 주제 클래스는 다음과 같이이다 :파이썬 클래스 초기화 - 속성 메모리

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로 작성했다 oddall dicts, 하루 키. 그러나 문제가있었습니다. 예를 들어, 강의 프로그래밍은 주 1이고 프로그래밍 실험실은 과목 2입니다. 과목 1은 월요일 9.15에 있습니다. 주제 2는 월요일에도 있지만 17.05에 있습니다. 그래서 나는 피사체가 짝수/홀수 주에 있는지 또는 매주인지를 확인하는 기능이 있습니다. 그리고 피사체 1의 f.e 9.15를 even["mon"]에게 할당합니다. 그러면 피사체 2에 가서 17.05를 even["mon"]에 추가하려고했습니다. 모든 주제는 목록에 저장된 다른 주제 클래스 객체였습니다. 그러나 실수가있었습니다. 내가 주제 2에에 17.05를 추가하려고 시도했을 때, 그것을 더했다. 그렇지만 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":"", 
     } 

+ 홀수 모든. 그렇다면 왜 파이썬은 첫 번째 객체 속성에 무엇이 기록되어 있는지 기억하는 것과 같은 것입니까?

답변

0

__init__ 메서드 내에서 특성을 선언해야합니다. 여기에 예제가있다

클래스 선언 안에 변수를 선언하면 인스턴스 멤버가 아닌 "클래스"멤버가된다. __init__ 메서드에서 선언하면 개체의 새 인스턴스를 만들 때마다 멤버의 새 인스턴스가 만들어집니다.

+0

init 메소드 위에 속성을 작성하는 것은 나쁜 습관입니까? – FrynioS

+0

예, 클래스의 모든 인스턴스에서 변수를 공유하지 않으려면 그렇게하지 않아도됩니다. – user3543300

+0

감사합니다. 지금은 분명합니다. – FrynioS