2013-12-16 5 views
-1

У меня проблема с этой программой. Я чрезвычайно новичок в объектах и ​​классах ... так что в основном у меня есть список классов, который будет в конечном итоге назначен на курс. Я пытаюсь выяснить, как точно разместить учеников и инструкторов внутри курса. Я как бы застрял здесь, я все понял, но, как я уже сказал, я новичок в этом, я не могу реализовать функцию добавления и удаления. любая помощь будет принята с благодарностью. Заранее благодарю.присвоение объектов другому объекту python

class course: 
    def __init__(self, courseName, capacity): 
    self.courseName = courseName 
    self.capacity = capacity 


    def add_student(self,key): 
    self.student[key] = value 

    def remove_student(self,del_key): 
    del self.student[del_key] 
+1

В качестве примечания стороны в Python 2.x всегда наследуются от 'object' (если у вас нет чего-то другого, чтобы наследовать); иначе вы получите «классические классы», у которых есть всевозможные раздражающие причуды, о которых вы не хотите узнавать или иметь дело. – abarnert

+0

В качестве другой заметки, в то время как ваш стиль заглавной буквы согласован, использование одного и того же стиля для имен классов и переменных, подобных этому, позволяет легко создавать глупые ошибки позже, когда вы скрываете или заменяете класс переменной. Вот почему [PEP 8] (http://www.python.org/dev/peps/pep-0008/) предлагает использовать имена классов класса CamelCase, 'lower_case' и функции. – abarnert

+0

«Я не могу получить добавленную и удаляемую функцию. Любая помощь будет принята с благодарностью». Это не вопрос. Что случилось с тем, что у вас есть. Также смотрите http://sscce.org и http://whathaveyoutried.com. – Marcin

ответ

1

Вы здесь довольно близко, но у вас есть две проблемы.

Во-первых, ваши методы add_student и remove_student пытаются изменить словарь с именем self.student, но вы забыли его создать. Делайте это в методе __init__, как это:

def __init__(self, courseName, capacity): 
    # existing stuff 
    self.student = {} 

Далее, ваши add_student потребности на самом деле взять параметр value, если вы хотите использовать его:

def add_student(self, key, value): 
    self.student[key] = value 

И это все. Теперь вы можете написать код так:

johnsmith = student('John', 'Smith', 14, 3.5) 
intropython = course('Python 1', 20) 
intropython.add_student('John Smith', johnsmith) 

Конечно, вы, вероятно, хотите, чтобы добавить больше материала к этому позже, например, таким образом, чтобы получить ключ по умолчанию для студента (как его имя и фамилию) , проверяя, len(self.student) == self.capacity перед добавлением другого ученика и т. д. Но это должно заставить вас начать.

+0

Я попробовал вашу версию функции add_student, и я все еще получаю сообщение об ошибке. >>> course.add_student (student1) Traceback (самый последний вызов последнего): Файл "", строка 1, в course.add_student (student1) TypeError: add_student() занимает ровно 3 аргумента (2 учитывая) и когда я пытаюсь это ваш путь ... Traceback (самый последний вызов последнего): Файл "", строка 1, в course.add_student ('Самуэль Сэма, student1) Файл " C: /Users/Andy/Downloads/c&o.py ", строка 36, в add_student self.student [ключ] = значение AttributeError: экземпляр курса не имеет атрибута 'student' – Aegg

+0

@Aegg: для второй проблемы вы явно не исправили первую часть. Если вы никогда не устанавливаете 'self.student = {}' в любом месте, вы получите 'AttributeError', пытающийся получить доступ или изменить' self.student', потому что вы пытаетесь получить доступ или изменить что-то, что не существует. – abarnert

+0

@Aegg: Между тем, для первой проблемы, если вы объявляете функцию с двумя параметрами, вы должны называть ее двумя аргументами. Более конкретно, вам нужно передать ключ и значение, если вы хотите использовать ключ и значение.Если вы хотите, чтобы он автоматически вызывал соответствующий ключ для значения (например, имя и фамилию) вместо того, чтобы принимать параметр, вам нужно написать код, который это делает. Я объяснил это в последнем абзаце. – abarnert

Смежные вопросы