本文整理匯總了Python中ast.ClassDef方法的典型用法代碼示例。如果您正苦於以下問題:Python ast.ClassDef方法的具體用法?Python ast.ClassDef怎麽用?Python ast.ClassDef使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類ast
的用法示例。
在下文中一共展示了ast.ClassDef方法的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Python代碼示例。
示例1: CONTINUE
# 需要導入模塊: import ast [as 別名]
# 或者: from ast import ClassDef [as 別名]
def CONTINUE(self, node):
# Walk the tree up until we see a loop (OK), a function or class
# definition (not OK), for 'continue', a finally block (not OK), or
# the top module scope (not OK)
n = node
while hasattr(n, 'parent'):
n, n_child = n.parent, n
if isinstance(n, LOOP_TYPES):
# Doesn't apply unless it's in the loop itself
if n_child not in n.orelse:
return
if isinstance(n, (ast.FunctionDef, ast.ClassDef)):
break
# Handle Try/TryFinally difference in Python < and >= 3.3
if hasattr(n, 'finalbody') and isinstance(node, ast.Continue):
if n_child in n.finalbody:
self.report(messages.ContinueInFinally, node)
return
if isinstance(node, ast.Continue):
self.report(messages.ContinueOutsideLoop, node)
else: # ast.Break
self.report(messages.BreakOutsideLoop, node)
示例2: _visit_cls
# 需要導入模塊: import ast [as 別名]
# 或者: from ast import ClassDef [as 別名]
def _visit_cls(self: 'ASTTagger', node: ast.ClassDef):
bases = visit_suite(self.visit, node.bases)
keywords = visit_suite(self.visit, node.keywords)
decorator_list = visit_suite(self.visit, node.decorator_list)
self.symtable.entered.add(node.name)
new = self.symtable.enter_new()
new.entered.add('__module__')
new.entered.add('__qualname__') # pep-3155 nested name.
new_tagger = ASTTagger(new)
new.cts.add(ContextType.ClassDef)
body = visit_suite(new_tagger.visit, node.body)
node.bases = bases
node.keywords = keywords
node.decorator_list = decorator_list
node.body = body
return Tag(node, new)
示例3: add_custom_type_symbol
# 需要導入模塊: import ast [as 別名]
# 或者: from ast import ClassDef [as 別名]
def add_custom_type_symbol(self,
custom_type: ir2.CustomType,
definition_ast_node: Union[ast.ClassDef, ast.ImportFrom, None],
source_module: Optional[str] = None):
self.add_symbol(name=custom_type.name,
expr_type=ir2.FunctionType(argtypes=tuple(arg.expr_type
for arg in custom_type.arg_types),
argnames=tuple(arg.name
for arg in custom_type.arg_types),
returns=custom_type),
definition_ast_node=definition_ast_node,
is_only_partially_defined=False,
is_function_that_may_throw=False)
self.custom_types_symbol_table.add_symbol(name=custom_type.name,
expr_type=custom_type,
definition_ast_node=definition_ast_node,
is_only_partially_defined=False,
is_function_that_may_throw=False,
source_module=source_module)
示例4: find_method
# 需要導入模塊: import ast [as 別名]
# 或者: from ast import ClassDef [as 別名]
def find_method(module, namespace):
"""Filter away everything except the method
Promote the method up to the global namespace so that it is
indistinguishable from a regular function.
Arguments:
module (ast.Module): the entire parsed source code
namespace (str): identifier for the method of interest
Returns:
module (ast.Module): the original module but with everything filtered
away except the method name but with the name `namespace` and promoted
to the global (i.e. top) level
"""
module_name, class_name, method_name = namespace.split('.')
classdefs = [stmt for stmt in module.body if isinstance(stmt, ast.ClassDef)]
classdef, = [classdef for classdef in classdefs if classdef.name == class_name]
methods = [stmt for stmt in classdef.body if isinstance(stmt, ast.FunctionDef)]
for method in methods:
if method.name == method_name:
method.name = f'{module_name}.{class_name}.{method_name}'
module.body = [method]
return module
示例5: classDefAtLineNumber
# 需要導入模塊: import ast [as 別名]
# 或者: from ast import ClassDef [as 別名]
def classDefAtLineNumber(sourceAst, lineNumber):
visitor = _AtLineNumberVisitor(lineNumber)
visitor.visit(sourceAst)
subnodesAtLineNumber = visitor.classDefSubnodesAtLineNumber
if len(subnodesAtLineNumber) == 0:
raise Exceptions.CantGetSourceTextError(
"Can't find a ClassDef at line %s." % lineNumber
)
if len(subnodesAtLineNumber) > 1:
raise Exceptions.CantGetSourceTextError(
"Can't find a unique ClassDef at line %s." % lineNumber
)
return subnodesAtLineNumber[0]
示例6: _computeInitMethodAstOrNone
# 需要導入模塊: import ast [as 別名]
# 或者: from ast import ClassDef [as 別名]
def _computeInitMethodAstOrNone(pyClassObject):
pyAst = pyAstFor(pyClassObject)
assert len(pyAst.body) == 1
classDef = pyAst.body[0]
assert isinstance(classDef, ast.ClassDef)
tr = None
# recall ClassDef = (identifier name, expr* bases, stmt* body, expr* decorator_list)
# we're taking the *last* __init__ here
for stmt in classDef.body:
if isinstance(stmt, ast.FunctionDef) and stmt.name == "__init__":
tr = stmt
return tr
示例7: get_comments_str
# 需要導入模塊: import ast [as 別名]
# 或者: from ast import ClassDef [as 別名]
def get_comments_str(file_name):
with open(file_name) as fd:
file_contents = fd.read()
module = ast.parse(file_contents)
function_definitions = [node for node in module.body if isinstance(node, ast.FunctionDef)]
doc = get_func_comments(function_definitions)
class_definitions = [node for node in module.body if isinstance(node, ast.ClassDef)]
for class_def in class_definitions:
temp_str = to_md(parse_func_string(ast.get_docstring(class_def)))
# excludes private methods (start with '_')
method_definitions = [
node
for node in class_def.body
if isinstance(node, ast.FunctionDef) and (node.name[0] != '_' or node.name[:2] == '__')
]
temp_str += get_func_comments(method_definitions)
doc += '## class ' + class_def.name + '\n' + temp_str
return doc
示例8: find_globals
# 需要導入模塊: import ast [as 別名]
# 或者: from ast import ClassDef [as 別名]
def find_globals(g, tree):
"""Uses AST to find globals in an ast tree"""
for child in tree:
if hasattr(child, 'body') and isinstance(child.body, list):
find_globals(g, child.body)
elif isinstance(child, (ast.FunctionDef, ast.ClassDef)):
g.add(child.name)
continue
elif isinstance(child, ast.Assign):
try:
g.add(child.targets[0].id)
except (IndexError, AttributeError):
pass
elif isinstance(child, ast.Import):
g.add(child.names[0].name)
elif isinstance(child, ast.ImportFrom):
for name in child.names:
g_name = name.asname or name.name
if g_name == '*':
continue
g.add(g_name)
示例9: test_classdef
# 需要導入模塊: import ast [as 別名]
# 或者: from ast import ClassDef [as 別名]
def test_classdef(self):
def cls(bases=None, keywords=None, body=None, decorator_list=None):
if bases is None:
bases = []
if keywords is None:
keywords = []
if body is None:
body = [ast.Pass()]
if decorator_list is None:
decorator_list = []
return ast.ClassDef("myclass", bases, keywords,
body, decorator_list)
self.stmt(cls(bases=[ast.Name("x", ast.Store())]),
"must have Load context")
self.stmt(cls(keywords=[ast.keyword("x", ast.Name("x", ast.Store()))]),
"must have Load context")
self.stmt(cls(body=[]), "empty body on ClassDef")
self.stmt(cls(body=[None]), "None disallowed")
self.stmt(cls(decorator_list=[ast.Name("x", ast.Store())]),
"must have Load context")
示例10: parse_functions
# 需要導入模塊: import ast [as 別名]
# 或者: from ast import ClassDef [as 別名]
def parse_functions(code):
"""Parse all the global functions present in the input code.
Parse all the ast nodes ast.FunctionDef that are global functions in the
source code. These also include function that are defined inside other
Python statements, like `try`. ast.ClassDef nodes are skipped from the
parsing so that class functions are ignored.
Args:
code (str): Multiline string representing Python code
Returns (dict): A dictionary [fn_name] -> function_source
"""
fns = dict()
tree = ast.parse(code)
for block in tree.body:
for node in walk(block,
stop_at=(ast.FunctionDef,),
ignore=(ast.ClassDef,)):
if isinstance(node, (ast.FunctionDef,)):
fn_name = node.name
fns[fn_name] = astor.to_source(node)
return fns
示例11: get_function_and_class_names
# 需要導入模塊: import ast [as 別名]
# 或者: from ast import ClassDef [as 別名]
def get_function_and_class_names(code):
"""Get all function and class names of the code block.
Inspects the code walking through its AST and returns all
the names of nodes matching ast.FunctionDef or ast.ClassDef.
Args:
code: Multiline string representing Python code
Returns: List of string names
"""
names = set()
tree = ast.parse(code)
for block in tree.body:
for node in walk(block):
if isinstance(node, (ast.FunctionDef, ast.ClassDef,)):
names.add(node.name)
return names
示例12: test_classdef
# 需要導入模塊: import ast [as 別名]
# 或者: from ast import ClassDef [as 別名]
def test_classdef(self):
def cls(bases=None, keywords=None, starargs=None, kwargs=None,
body=None, decorator_list=None):
if bases is None:
bases = []
if keywords is None:
keywords = []
if body is None:
body = [ast.Pass()]
if decorator_list is None:
decorator_list = []
return ast.ClassDef("myclass", bases, keywords, starargs,
kwargs, body, decorator_list)
self.stmt(cls(bases=[ast.Name("x", ast.Store())]),
"must have Load context")
self.stmt(cls(keywords=[ast.keyword("x", ast.Name("x", ast.Store()))]),
"must have Load context")
self.stmt(cls(starargs=ast.Name("x", ast.Store())),
"must have Load context")
self.stmt(cls(kwargs=ast.Name("x", ast.Store())),
"must have Load context")
self.stmt(cls(body=[]), "empty body on ClassDef")
self.stmt(cls(body=[None]), "None disallowed")
self.stmt(cls(decorator_list=[ast.Name("x", ast.Store())]),
"must have Load context")
示例13: CONTINUE
# 需要導入模塊: import ast [as 別名]
# 或者: from ast import ClassDef [as 別名]
def CONTINUE(self, node):
# Walk the tree up until we see a loop (OK), a function or class
# definition (not OK), for 'continue', a finally block (not OK), or
# the top module scope (not OK)
n = node
while hasattr(n, '_pyflakes_parent'):
n, n_child = n._pyflakes_parent, n
if isinstance(n, LOOP_TYPES):
# Doesn't apply unless it's in the loop itself
if n_child not in n.orelse:
return
if isinstance(n, (ast.FunctionDef, ast.ClassDef)):
break
# Handle Try/TryFinally difference in Python < and >= 3.3
if hasattr(n, 'finalbody') and isinstance(node, ast.Continue):
if n_child in n.finalbody and not PY38_PLUS:
self.report(messages.ContinueInFinally, node)
return
if isinstance(node, ast.Continue):
self.report(messages.ContinueOutsideLoop, node)
else: # ast.Break
self.report(messages.BreakOutsideLoop, node)
示例14: _generate_nodes
# 需要導入模塊: import ast [as 別名]
# 或者: from ast import ClassDef [as 別名]
def _generate_nodes(parent, level=0, breadcrumb=''):
nodes = []
for child in parent.body:
if isinstance(child, ast.ClassDef):
style = OutlineNodeItem.Style.cls
elif isinstance(child, ast.FunctionDef) or isinstance(child, ast.AsyncFunctionDef):
style = OutlineNodeItem.Style.fn
else:
style = None
if style:
node = OutlineNodeItem(style, child.name, child.lineno, child.col_offset, level, breadcrumb)
nodes.append(node)
if breadcrumb:
bc = '{} • {}'.format(breadcrumb, child.name)
else:
bc = child.name
child_nodes = OutlineDataSource._generate_nodes(child, level + 1, bc)
if child_nodes:
nodes.extend(child_nodes)
return nodes
示例15: _main_frame
# 需要導入模塊: import ast [as 別名]
# 或者: from ast import ClassDef [as 別名]
def _main_frame(self, node):
# type: (ast.AST) -> Optional[FrameType]
frame = sys._getframe(2)
result = self.secondary_to_main_frames.get(frame)
if result:
return result
original_frame = frame
while frame.f_code.co_name in ('<listcomp>', '<dictcomp>', '<setcomp>'):
frame = frame.f_back
for node in ancestors(node):
if isinstance(node, (ast.FunctionDef, ast.Lambda)):
break
if isinstance(node, ast.ClassDef):
frame = frame.f_back
if frame.f_code.co_name in ('<lambda>', '<genexpr>'):
return None
self.secondary_to_main_frames[original_frame] = frame
self.main_to_secondary_frames[frame].append(original_frame)
return frame