在我的情況下,我想保存和恢復文件中的一些「普通」變量(即整數,字符串),這最終將作爲類屬性。這個例子是我最近的地方,通過使用import
:純文本,Python的語法文件來保存和恢復一些類變量?
a.py
b = 134
a = "hello"
mytest.py
import inspect
class Teost:
from a import *
def __init__(self):
self.c = 12
print(inspect.getmembers(self)) # has a and b
print(self.__dict__) # no a and b
print(self.a) # prints "hello"
xx = Teost()
所以,在這裏a.py
作爲文件存儲變量值(a
和b
)和from a import *
裏面該類將它們作爲類屬性(self.a
和self.b
),這幾乎是我想要的。
不幸的是,原來使用出演import
語法類是不可取的:
$ python mytest.py
mytest.py:3: SyntaxWarning: import * only allowed at module level
class Teost:
[('__doc__', None), ('__init__', <bound method Teost.__init__ of <__main__.Teost instance at 0x7fdca368ab90>>), ('__module__', '__main__'), ('a', 'hello'), ('b', 134), ('c', 12)]
{'c': 12}
hello
...所以我得到一個醜陋的「SyntaxWarning:進口*只允許在模塊級」,這是我不能讓擺脫(除非我禁用警告,我不想這樣做)
所以,我有其他選擇,使用a.py
(即純文本,Python語法)編寫的文件,並有在它的變量最終作爲一些類屬性?
(我見過How do I save and restore multiple variables in python?,但我不感興趣pickle
或shelve
,因爲他們都沒有在Python語法寫,純文本文件)
謝謝@StephenRauch - 我覺得我最喜歡這種方法,歡呼! – sdaau
等待,但是'setattr(self,name,....)'會將'name'設置爲*實例*屬性,而不是類屬性......儘管如此,您仍然可以在元類中執行此操作。或者使用'setattr(Teost,name,...)'設置一個類屬性。 –