support for dynamic params in classes

This commit is contained in:
David Halter
2012-08-06 02:27:49 +02:00
parent e6ae235b78
commit 384c3a5b77
3 changed files with 40 additions and 11 deletions

View File

@@ -55,12 +55,10 @@ def search_params(param):
return result
func = param.get_parent_until(parsing.Function)
# add the listener
listener = ParamListener()
func.listeners.add(listener)
current_module = param.get_parent_until()
func_name = str(func.name)
if func_name == '__init__' and isinstance(func.parent, parsing.Class):
func_name = str(func.parent.name)
# get the param name
if param.assignment_details:
@@ -70,7 +68,9 @@ def search_params(param):
offset = 1 if arr[0][0] in ['*', '**'] else 0
param_name = str(arr[0][offset].name)
current_module = param.get_parent_until()
# add the listener
listener = ParamListener()
func.listeners.add(listener)
result = get_params_for_module(current_module)

View File

@@ -137,14 +137,22 @@ class Executable(object):
class Instance(Executable):
""" This class is used to evaluate instances. """
def __init__(self, base, var_args=parsing.Array(None, None)):
super(Instance, self).__init__(base, var_args)
# need to execute the __init__ function, because the dynamic param
# searching needs it.
try:
init_func = self.get_subscope_by_name('__init__')
except KeyError:
pass
else:
self.get_init_execution(init_func).get_return_types()
@memoize_default()
def get_init_execution(self, func):
if isinstance(func, parsing.Function):
instance_el = InstanceElement(self, Function(func))
return Execution(instance_el, self.var_args)
else:
return func
instance_el = InstanceElement(self, Function(func))
return Execution(instance_el, self.var_args)
def get_func_self_name(self, func):
"""

View File

@@ -58,3 +58,24 @@ def func(c=1):
return c
func(1.0)
# -----------------
# classes
# -----------------
class A():
def __init__(self, a):
#? str()
a
A("s")
class A():
def __init__(self, a):
#? int()
a
def test(self, a):
#? float()
a
A(3).test(2.0)