Найти - Пользователи
Полная версия: копирование экземпляра
Начало » Python для новичков » копирование экземпляра
1 2 3
pyuser
Андрей Светлов
callret, а прямо в лоб не пробовали? Вам же нужны не “связанные”, а “единые” координаты.
>>> class Coord(object):
... x = 0
... y = 0
...
... def __repr__(self):
... return "<%s, %s>" % (self.x, self.y)
...
>>> class Box(object):
... def __init__(self):
... self.center = Coord()
...
...
>>> class Circle(object):
... def __init__(self):
... self.center = Coord()
...
>>> b = Box()
>>> b.center
<0, 0>
>>> c = Circle()
>>> c.center
<0, 0>
>>> b.center.x = 10
>>> b.center
<10, 0>
>>> c.center
<0, 0>
>>> c.center = b.center
>>> c.center
<10, 0>
>>> b.center.y = 5
>>> c.center
<10, 5>
>>>
Если я все правильно понимаю, то после присвоения b.center.x = 10 получится некая неоднозначность с атрибутом x для объекта b.center: x, как атрибут класса Coord и x, как атрибут конкретного экземпляра класса Coord (т.е b.center)
уж если единые координаты, то наверно как-то так:
class Coord(object):
x = 0
y = 0

def __setattr__(self, key, value):
if "x" == key:
self.__class__.x = value
elif "y" == key:
self.__class__.y = value
else:
super(Coord, self).__setattr__(key, value)

def __repr__(self):
return "<%d, %d>" % (self.x, self.y)
callret
СПАСИБО! Очень помогло!
Андрей Светлов
pyuser, разделяются экземпляры, а не классы. Рассматривайте x=0 как default value.
pyuser
Андрей Светлов
pyuser, разделяются экземпляры, а не классы. Рассматривайте x=0 как default value.
Тогда, какой смысл в объявлении:
class Coord(object):
x = 0
y = 0
почему не
class Coord(object):
def __init__(self)
self.x = 0
self.y = 0
явное ведь лучше не явного
Андрей Светлов
Да, так лучше. Я писал как покороче.
Стоит еще слоты добавить, так чуть быстрее.
class Coord(object):
def __init__(self, x, y):
self.x, self.y = x, y

class Coord2(object):
__slots__ = 'x', 'y'
def __init__(self, x, y):
self.x, self.y = x, y


import timeit

print timeit.timeit("a = Coord(1, 2); a.x; a.y", "from __main__ import Coord")
print timeit.timeit("a = Coord2(1, 2); a.x; a.y", "from __main__ import Coord2")
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