Python 类 了解方法
Python Classes Understand methods
我的任务很简单:我们有 class TestingClass,我们只想测试他的方法。我们有 class TestHelper 用于测试目的。
class TestingClass():
def testing_method_1(self):
return False
def testing_method_2(self):
return True
class TestHelper():
def __init__(self, class_name):
pass
def add(self, func_name, func_result):
pass
def run(self):
pass
helper = TestHelper(TestingClass)
helper.add(“testing_method_1”, False)
helper.add(“testing_method_2”, True)
result = helper.run()
我的目标实现 class TestHelper 的方法。我自己解决了它,但我认为它的实现不好。我初始化空字典并测试 class。接下来我将每个方法和测试方法结果添加到字典中。在 运行 方法中,我比较结果。
class TestHelper():
def __init__(self, class_name):
self.test_class = class_name()
self.func_list = {}
def add(self, func_name, func_result):
temp = 'self.test_class.' + func_name
self.func_list[temp] = func_result
def run(self):
for f in self.func_list.keys():
if eval(f)() == self.func_list[f]:
print('yes')
else:
print('no')
我能以最好的方式解决它吗?谢谢!
为此目的使用 eval 有点矫枉过正。
您可以改为使用 getattr()
函数来检索函数并调用它。
阅读更多:Python Docs
class TestHelper():
def __init__(self, class_name):
self.test_class = class_name()
self.func_list = {}
def add(self, func_name, func_result):
# { <function>:<desired result> }
self.func_list[func_name] = func_result
def run(self):
for func, desired_result in self.func_list.items():
if getattr(self.test_class, func)() is desired_result:
print('yes')
else:
print('no')
此代码产生结果:
...
>>> helper = TestHelper(TestingClass)
>>> helper.add("testing_method_1", False)
>>> helper.add("testing_method_2", True)
>>> result = helper.run()
yes
yes
当然,您还应该测试 class 是否具有给定函数名称的属性。您可以为此使用 hasattr()
。
我的任务很简单:我们有 class TestingClass,我们只想测试他的方法。我们有 class TestHelper 用于测试目的。
class TestingClass():
def testing_method_1(self):
return False
def testing_method_2(self):
return True
class TestHelper():
def __init__(self, class_name):
pass
def add(self, func_name, func_result):
pass
def run(self):
pass
helper = TestHelper(TestingClass)
helper.add(“testing_method_1”, False)
helper.add(“testing_method_2”, True)
result = helper.run()
我的目标实现 class TestHelper 的方法。我自己解决了它,但我认为它的实现不好。我初始化空字典并测试 class。接下来我将每个方法和测试方法结果添加到字典中。在 运行 方法中,我比较结果。
class TestHelper():
def __init__(self, class_name):
self.test_class = class_name()
self.func_list = {}
def add(self, func_name, func_result):
temp = 'self.test_class.' + func_name
self.func_list[temp] = func_result
def run(self):
for f in self.func_list.keys():
if eval(f)() == self.func_list[f]:
print('yes')
else:
print('no')
我能以最好的方式解决它吗?谢谢!
为此目的使用 eval 有点矫枉过正。
您可以改为使用 getattr()
函数来检索函数并调用它。
阅读更多:Python Docs
class TestHelper():
def __init__(self, class_name):
self.test_class = class_name()
self.func_list = {}
def add(self, func_name, func_result):
# { <function>:<desired result> }
self.func_list[func_name] = func_result
def run(self):
for func, desired_result in self.func_list.items():
if getattr(self.test_class, func)() is desired_result:
print('yes')
else:
print('no')
此代码产生结果:
...
>>> helper = TestHelper(TestingClass)
>>> helper.add("testing_method_1", False)
>>> helper.add("testing_method_2", True)
>>> result = helper.run()
yes
yes
当然,您还应该测试 class 是否具有给定函数名称的属性。您可以为此使用 hasattr()
。