Форум сайта python.su
0
Доброго вечера!
Допустим есть 2 класса:
-класс коллекционер
-класс машина
Коллекционер может иметь много машин, машина имеет только одного коллекционера.
Прошу простить, если “это” больно читать.
Коллекционер:
from Car import *
from Exceptions import *
class Collectioner(object):
def __init__(self, name, car=None):
self.__dict__['cars'] = [car]
self.__dict__['name'] = name
def addCar(self, car):
if type(car) != Car:
raise SomeException()
if car.owner != self:
raise SomeException()
self.__dict__['cars'].append(car)
def removeCar(self, oldCar):
if type(oldCar) != Car:
raise SomeException
if oldCar.owner == self:
oldCar.changeOwner(None)
self.__dict__['cars'].remove(oldCar)
from Collectioner import *
from Exceptions import *
class Car(object):
def __init__(self,collectioner,model):
if type(collectioner) == Collectioner:
self.__dict__['owner'] = collectioner
self.__dict__['model'] = model
@property
def owner(self):
return self.__dict__['owner']
def changeOwner(self, newOwner):
if newOwner == None:
self.__del__(self)
return
if type(newOwner) != Collectioner:
raise SomeException()
self.__dict__['owner'] = newOwner
Отредактировано Tropick (Фев. 4, 2014 15:52:50)
Офлайн
253
Укажите питон который используете.
self.__dict__['owner'] = collectioner self.owner = collectioner
from Car import *
if type(newOwner) != Collectioner:
Офлайн
19
Циклические импорты зобороть можно вынеся общий код в отдельный модуль. Если хотит чтобы была связь двусторонняя то все что относится к Колллеционеру в Авто и в Авто к Коллекционеру выделяте в отдельный класс.
Да и НИКОГДА не используйте wild import огребете с именами.
Офлайн
253
PanovSergeyА можно и не бороть. Просто это некрасиво.
Циклические импорты зобороть
Офлайн
43
нужно загружать так
import Car
Car.Car
doza_andну у него там исключение кидается, это нормально же
проверка типа - архитектурный недостаток
doza_andТоже не согласен. У ТСа может некрасиво, а так ок.
Просто это некрасиво
Отредактировано sergeek (Фев. 4, 2014 19:06:30)
Офлайн
19
нужно загружать такПо мне таки обращаться к классу через точку (не надо называть модуль с заглавной буквы)import CarCar.Car
from car import Car
Отредактировано PanovSergey (Фев. 4, 2014 19:15:02)
Офлайн
43
PanovSergeyну так у ТСа все равно будет программа падать от рекурсивного импорта.from car import Car
Отредактировано sergeek (Фев. 4, 2014 19:28:10)
Офлайн
19
sergeekВыше написано как победить.
ну так у ТСа все равно будет программа падать от рекурсивного импорта.
Офлайн
43
PanovSergey
Выше написано как победить.
PanovSergeyтам общий код в методах, по-нормальному их никак не вынести в отдельный модуль
Циклические импорты зобороть можно вынеся общий код в отдельный модуль. Если хотит чтобы была связь двусторонняя то все что относится к Колллеционеру в Авто и в Авто к Коллекционеру выделяте в отдельный класс.
Офлайн
19
там общий код в методах, по-нормальному их никак не вынести в отдельный модульПонятно что код кривой и не рабочий. Вынести значит собрать общий код вместе и выпилить оттуда где его не должно быть, унести в одельный модуль, поправить импорты, профит
Стандартная задача.
Офлайн