【发布时间】:2020-09-17 08:28:02
【问题描述】:
是否可以在 Python 中直接设置某个值并通过任何方式(继承、元类、类装饰器)在类中获取它? B类不能被A中的set('a')污染。
import sys
class A:
set('a')
get()
# -> 'a'
print(sys.modules[__name__])
# => <module '__main__'>
class B:
get()
# -> None
【问题讨论】:
-
set和get到底在做什么? -
对于
A类,set('a')将A类(但不是它的实例)的'a'保存到内存中。get()从内存中获取保存的'a'。它不必在getting 时从内存中删除'a'。如果set()被调用两次,第一个值将被第二个值覆盖。在 B 中,get()尝试获取为类B保存的任何值。但是,它没有任何价值。因为,set()没有在B中调用。 -
这告诉我你想要他们做什么;我问他们实际上在做什么:显示定义。
-
实际上,
set和get做什么是任意的。但是,假设他们所做的会影响 Python 中答案的实现方式,这是一个示例; ``` a = 无;默认设置(值):a = 值; def get(): 返回一个; ``` 但是,这个例子显然不适用于我的第一个例子。这能回答你的问题吗? -
set正在创建一个局部变量;它不会更改全局变量a或A的类属性的值。
标签: python decorator python-decorators metaclass