forked from VimPlug/jedi
property / staticmethod / classmethod builtin implementation
This commit is contained in:
@@ -14,8 +14,8 @@ TODO annotations ? how ? type evaluation and return?
|
||||
TODO nonlocal statement
|
||||
|
||||
TODO getattr / __getattr__ / __getattribute__ ?
|
||||
TODO descriptors
|
||||
TODO @staticmethod @classmethod
|
||||
TODO descriptors (also for classes, for instances it should work)
|
||||
TODO @staticmethod @classmethod (implement descriptors, builtins are done)
|
||||
TODO variable assignments in classes (see test/completion/classes @230)
|
||||
"""
|
||||
from _compatibility import next, property
|
||||
|
||||
@@ -5,3 +5,47 @@ def next(iterator, default=None):
|
||||
else:
|
||||
return iterator.__next__()
|
||||
return default
|
||||
|
||||
class property():
|
||||
def __init__(self, fget, fset = None, fdel = None, doc = None):
|
||||
self.fget = fget
|
||||
self.fset = fset
|
||||
self.fdel = fdel
|
||||
self.__doc__ = doc
|
||||
|
||||
def __get__(self, obj, cls):
|
||||
return self.fget(obj)
|
||||
|
||||
def __set__(self, obj, value):
|
||||
self.fset(obj, value)
|
||||
|
||||
def __delete__(self, obj):
|
||||
self.fdel(obj)
|
||||
|
||||
def setter(self, func):
|
||||
self.fset = func
|
||||
return self
|
||||
|
||||
def getter(self, func):
|
||||
self.fget = func
|
||||
return self
|
||||
|
||||
def deleter(self, func):
|
||||
self.fdel = func
|
||||
return self
|
||||
|
||||
class staticmethod():
|
||||
def __init__(self, func):
|
||||
self.func = func
|
||||
|
||||
def __get__(self, obj, cls):
|
||||
return self.func
|
||||
|
||||
class classmethod():
|
||||
def __init__(self, func):
|
||||
self.func = func
|
||||
|
||||
def __get__(self, obj, cls):
|
||||
def method(*args, **kwargs):
|
||||
self.func(cls, *args, **kwargs)
|
||||
return method
|
||||
|
||||
@@ -189,13 +189,13 @@ class B():
|
||||
return ''
|
||||
p = Property(t)
|
||||
|
||||
##? str()
|
||||
B().p
|
||||
#? []
|
||||
B().r()
|
||||
#? int()
|
||||
B().r
|
||||
|
||||
##? str()
|
||||
B().p
|
||||
##? []
|
||||
B().p()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user