Во-первых, ввод ваших аргументов заглавными буквами сбивает с толку. Поскольку в Python нет формальной, статической проверки типов, мы используем UpperCase
для обозначения класса и lowerCase
для обозначения аргумента.
Во-вторых, мы не беспокоимся о CRoom и CPerson. Верхний регистр достаточно, чтобы указать, что это класс. Буква C не используется. Room
. Person
.
В-третьих, мы обычно не помещаем вещи в формате Один класс на файл . Файл представляет собой модуль Python, и мы чаще импортируем весь модуль со всеми классами и функциями.
[Я знаю, что это привычки - вам не нужно ломать их сегодня, но они затрудняют чтение.]
Python не использует статически определенные типы, такие как C ++. Когда вы определяете функцию метода, вы формально не определяете тип данных аргументов этой функции. Вы просто перечислите некоторые имена переменных. Надеюсь, клиентский класс предоставит аргументы правильного типа.
Во время выполнения, когда вы делаете запрос метода, Python должен быть уверен, что у объекта есть метод. НОТА. Python не проверяет, является ли объект нужного типа - это не имеет значения. Он только проверяет, имеет ли он правильный метод.
Цикл между room.Room
и person.Person
является проблемой. Вам не нужно включать один при определении другого.
Безопаснее всего импортировать весь модуль.
Вот room.py
import person
class Room( object ):
def __init__( self ):
self.nextId= 0
self.people= {}
def addPerson(self, firstName, secondName, gender):
id= self.NextId
self.nextId += 1
thePerson = person.Person(firstName,secondName,gender,id)
self.people[id] = thePerson
return thePerson
Работает нормально, пока Person в конечном итоге определен в пространстве имен, в котором он выполняется. Человек не должен быть известен, когда вы определяете класс.
Person не должен быть известен до тех пор, пока не будет вычислено выражение Person (...).
Вот person.py
import room
class Person( object ):
def something( self, x, y ):
aRoom= room.Room( )
aRoom.addPerson( self.firstName, self.lastName, self.gender )
Ваш main.py
выглядит так
import room
import person
r = room.Room( ... )
r.addPerson( "some", "name", "M" )
print r