Форум сайта python.su
0
помогите пожалуйста разобраться
я создаю синглтон так:
class Room(object): obj = None def __new__(cls,*dt,**mp): if cls.obj is None: cls.obj = object.__new__(cls,*dt,**mp) return cls.obj def __init__(self, left_wall, right_wall, front_wall, back_wall): self.left_wall = left_wall self.right_wall = right_wall self.front_wall = front_wall self.back_wall = back_wall def __str__(self): return str(self.left_wall) + str(self.right_wall) + str(self.front_wall) + str(self.back_wall) room_obj = Room(True, True, True, True) room_obj2 = Room(False, False, False, False) print(room_obj is room_obj2) print(room_obj) print(room_obj2)
kalinin@kalinin ~/python/object2 $ python index.py True FalseFalseFalseFalse FalseFalseFalseFalse
class Room(): obj = None def __new__(cls,*dt,**mp): if cls.obj is None: cls.obj = object.__new__(cls,*dt,**mp) return cls.obj def __init__(self, left_wall, right_wall, front_wall, back_wall): self.left_wall = left_wall self.right_wall = right_wall self.front_wall = front_wall self.back_wall = back_wall def __str__(self): return str(self.left_wall) + str(self.right_wall) + str(self.front_wall) + str(self.back_wall) room_obj = Room(True, True, True, True) room_obj2 = Room(False, False, False, False) print(room_obj is room_obj2) print(room_obj) print(room_obj2)
kalinin@kalinin ~/python/object2 $ python index.py False TrueTrueTrueTrue FalseFalseFalseFalse
Офлайн
568
zlodiakВсе не так. Во втором питоне есть классы нового и старого стиля. Гуглить самостоятельно.
но если его не указывать, то он не перестанет быть наследником настолько фундаментального класса.
Офлайн
103
code.activestate.com/recipes/singletonsubclass-with-once-initialization/
http://code.activestate.com/recipes/langs/python/tags/singleton/
Офлайн