__metaclass__ and deepcopy issue

Wouter DW wouter.dewilde at gmail.com
Fri Oct 17 04:00:50 EDT 2008


I read the article on http://www.python.org/download/releases/2.2/descrintro/#metaclasses
and started using autoprop.
But now I have a problem I can't seem to solve myself.

class autoprop(type):
  def __init__(cls, name, bases, dict):
    super(autoprop, cls).__init__(name, bases, dict)
    props = {}
    for name in dict.keys():
      if name.startswith("_get_") or name.startswith("_set_"):
        props[name[5:]] = 1
    for name in props.keys():
      fget = getattr(cls, "_get_%s" % name, None)
      fset = getattr(cls, "_set_%s" % name, None)
      setattr(cls, name, property(fget, fset))
class InvertedX:
  __metaclass__ = autoprop
  def _get_x(self):
    return -self.__x
  def _set_x(self, x):
    self.__x = -x

a = InvertedX()
from copy import deepcopy
b = deepcopy(a)

The deepcopy gives an error inside copy.py of the python lib.

TypeError: descriptor '__reduce__' of 'object' object needs an
argument

Does anybody know how to solve this issue?



More information about the Python-list mailing list