在实际使用Python的过程中,遇到了一个问题,就是定义一个数组,数组内容为对应类名字的字符串。

此时在调用对应的类,生成实例时,需要将字符串转化为相应的类,之后再进行实例化。

# coding : utf-8
import time
from OffLineGateway import OffLineGateway
from OffLineTS import OffLineTS
import copy class PlayTest(object):
def __init__(self, file):
self.file = file
get_obj = file.split('.')[0]
module = __import__(get_obj)
self.server_name = getattr(module, get_obj)()
self.test_param_file = r'./' + file.split('.')[0] + r"param" + time.strftime("%H%M%S", time.localtime()) + ".txt"
self.test_func_file = r'./' + file.split('.')[0] + r"func" + time.strftime("%H%M%S", time.localtime()) + ".txt" def set_function(self, num, variable):
flag = 0
content = ""
file_object = open(self.file, 'r', encoding='utf-8')
for line in file_object:
string = r' def test_exe_param' + str(num) + r'(self):'
if line.__contains__(string) and flag == 0:
flag = 1
content += ' def test_exe_param' + str(num) + '_' + str(variable) + r'(self):\n'
else:
if line.__contains__(" def test_exe_param") and flag == 1:
break
elif flag == 1:
if line.__contains__('self.assertFalse(True, '):
content += line
content += '\n if get_return_code != "000000":\n'
content += ' self.assertEqual(get_errormsg, self.server.read_config' \
'(self.config_file, get_return_code))\n'
content += ' else:\n'
content += ' self.assertFalse(True, "没有对应的错误码。")\n\n'
break
else:
if line.__contains__('result = self.server.get_result(self.ip, self.param'):
new_line = line.replace(str(num), str(num) + "_" + str(variable))
content += '\n' + new_line
elif line.__contains__('self.param' + str(num) + '['):
new_line = line.replace(str(num), str(num) + "_" + str(variable))
content += '\n' + new_line
else:
content += line
else:
pass return content def get_param(self):
of = self.server_name.setUp()
for i in range(1, 100):
try:
j = 1
param = eval("of['self'].param" + str(i))
print(i)
port = list(param.keys())[0]
temp = copy.deepcopy(param)
for key in param[port][1].keys():
param[port][1][key] = ""
with open(self.test_param_file, "a", encoding="utf-8") as f:
f.write(" self.param" + str(i) + "_" + str(j) + " = " + str(param) + "\n")
# print("self.param" + str(i) + "_" + str(j) + " = " + str(param))
with open(self.test_func_file, "a", encoding="utf-8") as f:
f.write(self.set_function(i, j))
# print(self.set_function(i, j))
j += 1
param[port][1][key] = temp['gw'][1][key]
for key in param[port][1].keys():
param[port][1][key] = ""
with open(self.test_param_file, "a", encoding="utf-8") as f:
f.write(" self.param" + str(i) + "_" + str(j) + " = " + str(param) + "\n")
# print("self.param" + str(i) + "_" + str(j) + " = " + str(param))
with open(self.test_func_file, "a", encoding="utf-8") as f:
f.write(self.set_function(i, j))
# print(self.set_function(i, j))
j += 1
param[port][1] = {}
with open(self.test_param_file, "a", encoding="utf-8") as f:
f.write(" self.param" + str(i) + "_" + str(j) + " = " + str(param) + "\n")
# print("self.param" + str(i) + "_" + str(j) + " = " + str(param))
with open(self.test_func_file, "a", encoding="utf-8") as f:
f.write(self.set_function(i, j))
# print(self.set_function(i, j))
except AttributeError as ae:
print("没有了。")
break if __name__ == '__main__':
file_name = ['OffLineGateway', 'OffLineTS']
for name in file_name:
print(name)
test = PlayTest(name + ".py")
test.get_param()
time.sleep(1.0)

+++++++++++++++++++++++++++++++++++++++分割线+++++++++++++++++++++++++++++++++++++++

方法一:

class obj(object):

pass

a = eval('obj()')

方法二:

如果是经常需要这样可以

#将用来创建对象的字符串预编译成code对象.

create_obj = compile('obj()', 'create_obj.py', 'eval')

#需要创建的时候, 直接用code对象, 这样会有效率上的提升. #因为code对象是预编译过的, 而不用每次去编译

a = eval(create_obj)

方法三:

file_name  模块名

module = __import__(file_name)

AClass = getattr(module, class_name_str)()

a = AClass() 或

obj = new.instance(AClass)

方法四: 也可以使用global(),locals(),dir()这类获取对象名和对象对应的函数

转自:http://www.th7.cn/Program/Python/201510/666094.shtml

python将对象名的字符串类型,转化为相应对象的操作方法的更多相关文章

  1. Json对象与Json字符串的转化、JSON字符串与Java对象的转换

    一.Json对象与Json字符串的转化 1.jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符 ...

  2. Json对象与Json字符串的转化、JSON字符串与Java对象的转换(转)

    一.Json对象与Json字符串的转化 1.jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符 ...

  3. Python基础(3) - 数据类型:2字符串类型

    Python字符串的表示有三种方法: 1.单引号(') >>>a = 'I love python. ' 2.双引号(") >>>a = " I ...

  4. JSON数组对象和JSON字符串的转化,map和JSON对象之间的转化

    这种用法包括前端和后端: 前端: 1. 转化为JSON对象方便操作 var jsonObj = JSON.parse(str); 得到的是一个json数组对象,可以通过 for (var p in j ...

  5. 将DataTable转换为List<T>对象遇到问题:类型“System.Int64”的对象无法转换为类型“System.Int32”。

    可以利用反射将DataTable转换为List<T>对象:原始链接http://www.jb51.net/article/67386.htm 但是该方法在DataTable里某个字段类型是 ...

  6. Python进阶:如何将字符串常量转化为变量?

    前几天,我们Python猫交流学习群 里的 M 同学提了个问题.这个问题挺有意思,经初次讨论,我们认为它无解. 然而,我认为它很有价值,应该继续思考怎么解决,所以就在私密的知识星球上记录了下来. 万万 ...

  7. python入门及数字、字符串类型

    目录 python开发框架 开发 1. 开发语言 2. 语言比对 3. python安装 4. Python开发IDE:pycharm ,eclipse python入门 1. 第一句Python 2 ...

  8. Json对象与Json字符串的转化

    1.jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象 2.浏览器支持的转 ...

  9. python 使用函数名的字符串调用函数(4种方法)_black-heart的专栏-CSDN博客 https://blog.csdn.net/mrqingyu/article/details/84403924

    funcs = ['fetch_data_' + i for i in ( 'activities', 'banners', 'server_list')]# from operator import ...

随机推荐

  1. mongoDB用法整理

    1. mongoDB UI工具, Studio 3T,用Non_Commercial的版本就足够. 2. 查询某字段长度大于特定值的 db.test.find({ F_DAQDATA: { $type ...

  2. .NET Core 2.1中的HttpClientFactory最佳实践

    ASP.NET Core 2.1中出现一个新的HttpClientFactory功能, 它有助于解决开发人员在使用HttpClient实例从其应用程序发出外部Web请求时可能遇到的一些常见问题. 介绍 ...

  3. [转]springboot2 webflux 响应式编程学习路径

    原文链接 spring官方文档 springboot2 已经发布,其中最亮眼的非webflux响应式编程莫属了!响应式的weblfux可以支持高吞吐量,意味着使用相同的资源可以处理更加多的请求,毫无疑 ...

  4. css如何实现一个元素高度固定宽度按比例显示?

    用padding-top百分比可以实现宽度固定高度按比例展示,现在的需求是对一个video视频的盒子div高度是固定的,宽度如何按比例展示? 解决后效果如图: 红框标注的即是我在上面高度比例固定的范围 ...

  5. 【多媒体封装格式详解】--- AAC ADTS格式分析

    ADTS全称是(Audio Data Transport Stream),是AAC的一种十分常见的传输格式. 记得第一次做demux的时候,把AAC音频的ES流从FLV封装格式中抽出来送给硬件解码器时 ...

  6. Docker学习笔记之二:制作镜像并PUSH

    Pull 如果是Public的(docker官方仓库和加速器) 直接 docker pull ubuntu:16.04 即可 若是私有的 首先登陆 docker login 仓库Host 之后 doc ...

  7. 禅道docker化(Centos7.2)

    操作步骤 确认服务器禅道版本及容器禅道版本 服务器禅道版本:9.6.2 容器禅道版本:9.6.3 版本sql比对 下载官方9.6.3源码包url:http://dl.cnezsoft.com/zent ...

  8. 帝国CMS 您来自的链接不存在

      网上的解决方法如下. 我是在通过接口,发布新闻,然后点击修改的时候,提示这个. 网上的方法,是让检查这个栏目下,有没有设置默认模板,包括:列表模板和内容模板,如果没有,就设定一下,再“更新数据库缓 ...

  9. python set和get实现

    import math class Square: # 正方形 def __init__(self, l): self.length = l # 边长 def __setattr__(self, ke ...

  10. phpmyadmin新姿势getshell

    旁白:在一个有WAF.并且mysql中的Into outfile禁用的情况下,我该如何getshell? 作者:倾旋email:payloads@aliyun.com投稿联系:service@cora ...