python开发自动创建类和方法
如何实现根据参数自动创建类和方法,这是测试开发的必学课程
1.示例使用工厂函数来创建
def create_class(class_name, method_name, method_body):
# 使用exec在局部作用域内定义方法
def make_method(method_name, method_body):
exec(f"def {method_name}(self): {method_body}")
return locals()[method_name]
# 动态创建类
class MetaClass(object):
def __init__(self):
pass
# 在类定义时添加方法
my_method = make_method(method_name, method_body)
# 返回动态创建的类
return type(class_name, (MetaClass,), {})
# 创建类和方法
MyClass = create_class('MyClass', 'my_method', 'print("My method called")')
# 创建类的实例并调用方法
instance = MyClass()
instance.my_method() # 输出: My method called
2.通过参数定义类和方法以及导入模块,并写入新的py文件
# 关键词定义类和方法
class_name = "MyClass"
method_name = "my_method"
class_definition = f"class {class_name}:\n def {method_name}(self):\n print('This is a dynamic method')\n"
# 导入模块
import_statement = "import math\n"
# 将内容写入新的py文件
filename = "dynamic_code.py"
with open(filename, "w") as file:
file.write(import_statement)
file.write(class_definition)
print(f"内容已写入{filename}文件")
3,使用更高级的魔法元类
# 定义一个元类
class MyMeta(type):
def __new__(cls, name, bases, attrs):
new_attrs = {}
# 循环创建多个方法
for i in range(1, 4):
def new_method(self, num=i):
print(f"This is method {num}")
new_attrs[f"method_{i}"] = new_method
new_attrs.update(attrs)
return super().__new__(cls, name, bases, new_attrs)
# 使用元类创建多个类
class MyClass1(metaclass=MyMeta):
pass
class MyClass2(metaclass=MyMeta):
pass
# 创建实例并调用方法
obj1 = MyClass1()
obj1.method_1() # 输出 "This is method 1"
obj1.method_2() # 输出 "This is method 2"
obj2 = MyClass2()
obj2.method_2() # 输出 "This is method 2"
obj2.method_3() # 输出 "This is method 3"