Я реализую объект, который почти идентичен набору, но требует дополнительной переменной экземпляра, поэтому я подклассифицирую встроенный заданный объект. Каков наилучший способ убедиться, что значение этой переменной копируется при копировании одного из моих объектов?Каков правильный (или лучший) способ подкласса класса набора Python, добавив новую переменную экземпляра?
Использование модуля старые наборы, следующий код работает отлично:
import sets
class Fooset(sets.Set):
def __init__(self, s = []):
sets.Set.__init__(self, s)
if isinstance(s, Fooset):
self.foo = s.foo
else:
self.foo = 'default'
f = Fooset([1,2,4])
f.foo = 'bar'
assert((f | f).foo == 'bar')
, но это не работает, используя встроенный в установленном модуле.
Единственное решение, которое я вижу, это переопределить каждый метод, который возвращает скопированный объект набора ... в этом случае я мог бы также не подвергать подклассу заданному объекту. Наверняка есть стандартный способ сделать это?
(Чтобы уточнить, делает следующий код не работы (утверждение не):
class Fooset(set):
def __init__(self, s = []):
set.__init__(self, s)
if isinstance(s, Fooset):
self.foo = s.foo
else:
self.foo = 'default'
f = Fooset([1,2,4])
f.foo = 'bar'
assert((f | f).foo == 'bar')
)
Это полезный вклад, спасибо. это не похоже на то, что вы набираете много, делая _wrap_methods метод класса, а не функцию, - это только для модульности, которую он дает? – rog
Это действительно круто, спасибо за проницательный вклад! – bjd2385