在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python/ 已知有一個和“實例化的類的名稱”相同的字符串str, 如何根據(jù)str來獲取這個

已知有一個和“實例化的類的名稱”相同的字符串str, 如何根據(jù)str來獲取這個類的屬性、使用其方法(怎么使用動態(tài)變量)

問題描述

如題,多次實例化了一個類之后,如何通過保存的實例的名稱字符串str獲得類的屬性、方法。
直接使用字符串str調(diào)用會報錯,Traceback如下:圖片描述

那么怎么通過str獲得這個類的屬性和方法呢?

部分代碼

類的部分定義
圖片描述

conceptioins用于存放實例化過的類的名稱
conceptionclass用于存放其地址:圖片描述

圖片描述

但是直接使用字符串和使用地址這兩種方式都不能獲得str所對應的類的屬性、方法
圖片描述

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

嘗試

查資料之后有一個帖子里說利用字典可以儲存任意類型的鍵值對的特性可以保存實例化對象的正確類型,使其對于程序來說有意義。但是也失敗了,我試著打印了鍵值對的value值,發(fā)現(xiàn)其存儲的就是類的實例化對象所存儲的物理地址...然后我就很崩潰了...不知道這類問題應該怎么處理

如能解答 感激不盡!!

如能解答 感激不盡??!

如能解答 感激不盡??!

回答
編輯回答
情殺

如題,多次實例化了一個類之后,如何通過保存的實例的名稱字符串str獲得類的屬性、方法。

要獲取類的屬性,方法,不需要保存什么名稱字符串。

2018年1月24日 16:44
編輯回答
凹凸曼

自己的回答


在看了大家的回答之后我又去百度了一下,基本和@zhangliganggm說的一樣。
嗯。。是我自己歸納的太羅嗦了 這個問題歸納出來應該是在Python中怎么使用動態(tài)變量。
使用locals和globals兩個函數(shù)就可以了,這兩個Python自帶的函數(shù)已經(jīng)替我們完成了使用字典來完成動態(tài)變量的工作,所以@勤奮的懶人所說的也沒錯,肯定是我之前嘗試的時候出了錯。。

一、嘗試使用locals()函數(shù)來完成動態(tài)變量命名及賦值

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.使用任意字典即可完成動態(tài)變量的賦值和命名工作
2.我是個天才(霧
3.天才也有犯蠢的時候


最后把我查到的資料也貼出來吧,說不定能幫到和我遇到一樣問題的coder
傳送門Python兩個內(nèi)置函數(shù)——locals 和globals (學習筆記)
Python中使用動態(tài)變量名的方法(這個比較重要)

2018年7月9日 10:05
編輯回答
妖妖

你的嘗試應該可以的。以實例名為鍵,實例為值建立字典。

2017年12月23日 17:27
編輯回答
無標題

好像明白了一些。。就是通過名稱去找類?
用 globals 就行了,可以查看所有實例前后的所有類。

2017年3月30日 12:26
編輯回答
入她眼

沒太看懂什么意思,這個能滿足么?

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

i = A()
print(i.__class__.__dict__)
2018年9月9日 23:03