已知有一个和“实例化的类的名称”相同的字符串str, 如何根据str来获取这个类的属性、使用其方法(怎么使用动态变量)

问题描述

如题,多次实例化了一个类之后,如何通过保存的实例的名称字符串str获得类的属性、方法。
直接使用字符串str调用会报错,Traceback如下:图片描述

那么怎么通过str获得这个类的属性和方法呢?

部分代码

类的部分定义
图片描述

conceptioins用于存放实例化过的类的名称
conceptionclass用于存放其地址:图片描述

图片描述

但是直接使用字符串和使用地址这两种方式都不能获得str所对应的类的属性、方法
图片描述

运行后便得到前面所示的Traceback

尝试

查资料之后有一个帖子里说利用字典可以储存任意类型的键值对的特性可以保存实例化对象的正确类型,使其对于程序来说有意义。但是也失败了,我试着打印了键值对的value值,发现其存储的就是类的实例化对象所存储的物理地址...然后我就很崩溃了...不知道这类问题应该怎么处理

如能解答 感激不尽!!

如能解答 感激不尽!!

如能解答 感激不尽!!

阅读 10k
5 个回答

自己的回答


在看了大家的回答之后我又去百度了一下,基本和@zhangliganggm说的一样。
嗯。。是我自己归纳的太罗嗦了 这个问题归纳出来应该是在Python中怎么使用动态变量
使用locals和globals两个函数就可以了,这两个Python自带的函数已经替我们完成了使用字典来完成动态变量的工作,所以@勤奋的懒人所说的也没错,肯定是我之前尝试的时候出了错。。

一、尝试使用locals()函数来完成动态变量命名及赋值

1.测试代码


class A():
    def __init__(self,name):
        self.name = name
        self.info = "我是" + self.name + "号实例。"
    def output_info(self):
        print(self.info)
        
names = locals()

nums = list(range(5))
for num in nums:
    name = input("给实例取个名字:")
    names['x%s'%num] = A(name)
    # ~ name = input("给变量取个名字:")
    # ~ names['x%s'%num] = num**num

for num in nums:
    names['x%s'%num].output_info()

2.运行结果

图片描述完美

二、尝试使用任意字典而不是locals()


1.测试代码

class A():
    def __init__(self,name):
        self.name = name
        self.info = "我是" + self.name + "号实例。"
    def output_info(self):
        print(self.info)
        
names = locals()
test = {}

nums = list(range(5))
for num in nums:
    name = input("给实例取个名字:")
    names['x%s'%num] = A(name)
    test['x%s'%num] = A(name)
    # ~ name = input("给变量取个名字:")
    # ~ names['x%s'%num] = num**num

for num in nums:
    names['x%s'%num].output_info()
    test['x%s'%num].output_info()

2.运行结果

图片描述

三、结论

1.使用任意字典即可完成动态变量的赋值和命名工作
2.我是个天才(雾
3.天才也有犯蠢的时候


最后把我查到的资料也贴出来吧,说不定能帮到和我遇到一样问题的coder
传送门Python两个内置函数——locals 和globals (学习笔记)
Python中使用动态变量名的方法(这个比较重要)

好像明白了一些。。就是通过名称去找类?
用 globals 就行了,可以查看所有实例前后的所有类。

你的尝试应该可以的。以实例名为键,实例为值建立字典。

没太看懂什么意思,这个能满足么?

class A(object):
    a = 5
    def b(self):pass

i = A()
print(i.__class__.__dict__)

如题,多次实例化了一个类之后,如何通过保存的实例的名称字符串str获得类的属性、方法。

要获取类的属性,方法,不需要保存什么名称字符串。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏