如何获取py文件中所有类名并存储至列表中
时间: 2023-06-27 17:05:38 浏览: 97
你可以使用Python内置的`inspect`模块来获取一个py文件中所有的类名,然后将其存储到一个列表中。以下是一个示例代码:
```python
import inspect
def get_class_names(file_path):
class_names = []
with open(file_path, 'r') as f:
for line in f:
if 'class' in line:
name = line.split()[1]
class_names.append(name)
return class_names
file_path = 'example.py'
classes = get_class_names(file_path)
print(classes)
```
这个函数接受一个文件路径作为参数,打开文件并逐行读取。如果某一行包含关键字"class",则从该行中提取类名并将其添加到类名列表中。最后返回类名列表。
请注意,这种方法仅适用于在文件中定义的类,而不是导入的类。如果你需要获取导入的类名,可以使用`dir()`函数来获取模块中的所有名称,然后筛选出类名称。
相关问题
全局路径搜索Python文件,用is.wolk 拼接路径,importing.import-module获取属性便利属性判断是否为类函数,返回结果,文件路径,类名,函数名,函数输入参数以及类型,前提条件是带有装饰器的函数
以下是一个可能实现你想要的功能的 Python 代码:
```python
import os
import inspect
import importing
def find_decorated_functions(start_dir):
# 存储结果的列表
results = []
# 遍历目录中的所有 Python 文件
for root, dirs, files in os.walk(start_dir):
for file in files:
if file.endswith(".py"):
# 构造文件路径
path = os.path.join(root, file)
# 使用 importing 模块导入模块
module = importing.import_module(os.path.splitext(path)[0])
# 检查模块中的所有属性
for name, obj in inspect.getmembers(module):
# 如果属性是函数并且带有装饰器
if inspect.isfunction(obj) and hasattr(obj, "__wrapped__"):
# 获取函数的输入参数及其类型
signature = inspect.signature(obj)
params = []
for param in signature.parameters.values():
params.append((param.name, param.annotation))
# 存储结果
results.append((path, obj.__wrapped__.__qualname__, obj.__name__, params))
return results
```
这个函数会在指定目录下查找所有 Python 文件,并尝试导入每个文件中的模块。然后,它会检查模块中的每个属性,如果属性是一个带有装饰器的函数,则会提取函数的输入参数及其类型,并返回结果。返回值是一个列表,其中每个元素都是一个包含文件路径、类名、函数名和函数输入参数及其类型的元组。
如何在多个文件里使用同一个全局变量
在多个文件中使用同一个全局变量通常涉及到跨模块或者包的共享数据。在大多数面向对象编程语言中,如Python、JavaScript或Java,你可以通过以下几种方式进行:
1. **静态变量(Static Variables, Python 或 Java)**:
- Python:将变量声明为`global`关键字,在需要使用的模块顶层定义。
```python
# global_variable.py
global_var = "This is a global variable"
```
- Java:在公共访问修饰符(如public static)下声明,然后在其他类中通过类名直接引用。
```java
public class GlobalVariable {
public static String GLOBAL_VAR = "This is a global variable";
}
```
2. **模块级变量(Module-Level Variables, Python)**:
在Python中,如果你有多个`.py`文件属于同一个模块,可以在模块内定义全局变量。
3. **配置文件(Config Files, 通用)**:
将变量存储在一个独立的配置文件(如`.ini`, `.json`, `yaml`等)中,并在所有需要的地方导入并读取。
4. **共享数据库(Shared Database, 数据库系统)**:
如果你的应用基于数据库,那么可以将变量作为表单的一部分存储在数据库中。
5. **使用命名空间(Namespaces, JavaScript/TypeScript)**:
在JavaScript或TypeScript中,可以利用`window`对象(浏览器环境)或`module.exports`(Node.js环境)来创建全局变量。
注意:过多依赖全局变量可能导致代码维护困难,应尽量避免在大型项目中滥用。在函数式编程中,可能会选择通过函数参数传递共享数据。
阅读全文