Найти - Пользователи
Полная версия: указание суперкласса object
Начало » Python для новичков » указание суперкласса object
1
zlodiak
помогите пожалуйста разобраться

я создаю синглтон так:
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

то есть получается, что синглтон не работает.

а разница лишь а том, что во втором случае я не указываю для класса суперкласс. то есть, как я понимаю, любой класс наследуется от самого общего класса object но если его не указывать, то он не перестанет быть наследником настолько фундаментального класса. тем не менее это произошло в моих примерах
FishHook
zlodiak
но если его не указывать, то он не перестанет быть наследником настолько фундаментального класса.
Все не так. Во втором питоне есть классы нового и старого стиля. Гуглить самостоятельно.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB