1
0
forked from VimPlug/jedi

__slots__ usage works much better now -> scan for all slots and not only for current class

This commit is contained in:
David Halter
2013-01-09 21:44:59 +01:00
parent f32c2e6dc4
commit e9aadce5ae
2 changed files with 10 additions and 8 deletions

View File

@@ -159,13 +159,15 @@ def fast_parent_copy(obj):
# __dict__ not available, because of __slots__ # __dict__ not available, because of __slots__
items = [] items = []
try: before = ()
names = new_obj.__slots__ for cls in new_obj.__class__.__mro__:
except AttributeError: try:
# __slots__ not available (normal) if before == cls.__slots__:
pass continue
else: before = cls.__slots__
items += [(n, getattr(new_obj, n)) for n in names] items += [(n, getattr(new_obj, n)) for n in before]
except AttributeError:
pass
for key, value in items: for key, value in items:
# replace parent (first try _parent and then parent) # replace parent (first try _parent and then parent)

View File

@@ -1192,7 +1192,7 @@ class Name(Simple):
So a name like "module.class.function" So a name like "module.class.function"
would result in an array of [module, class, function] would result in an array of [module, class, function]
""" """
__slots__ = ('names', ) __slots__ = ('names',)
def __init__(self, module, names, start_pos, end_pos, parent=None): def __init__(self, module, names, start_pos, end_pos, parent=None):
super(Name, self).__init__(module, start_pos, end_pos) super(Name, self).__init__(module, start_pos, end_pos)
self.names = tuple(n if isinstance(n, NamePart) else self.names = tuple(n if isinstance(n, NamePart) else