python - 如何在初始化时读取变量的名称并将其存储在 python 中的描述符类中?
问题描述
我的计划是这样的:使用 python 描述符,我想在赋值时读取变量的名称。当前代码:
class Decriptor:
def __init__(self, field_type: typing.Type[typing.Any]):
self.field_type = field_type
self.value = None
def __get__(self, instance, owner):
return self.value
def __set__(self, instance, constant):
if issubclass(type(constant), self.field_type):
self.value = constant
else:
raise TypeError(f"expected an instance of type {self.field_type.__name__} for attribute {}, got {type(constant).__name__} instead")
我使用描述符的原因是在编译时实现静态类型并为字段分配和声明提供一个包装器。如果我要在课堂上实现它......
class Foo:
num = Decriptor(field_type=int)
def __init__(self, num):
self.z = num
目标:如何在没有直接引用的情况下将变量 num 的名称作为字符串并将其分配给 Descriptor 类中的字段,例如self.name
?因此,当我更改类的不同实例中的值时,我可以只写instance.__dict__[self.name] = constant
?
解决方案
从 Python 3.7 开始,我们有方法__set_name__
,在初始化描述符时调用,它读取变量的名称
#add this to code
def __set_name__(self, owner, name):
self.name = name
推荐阅读
- matlab - 在Matlab中以双倍的单元格数组X值绘制数据时间
- python - 卷积双线性插值
- android - 尝试使用 RecyclerView 时出错 - 为什么?
- sql - 尝试将表单提交到数据库时出错
- xml - 如何在 PowerShell 中自动创建 XML 的新元素?
- angular - 错误参考错误:“ng build”时“未定义缓冲区”
- java - 为什么 ResponseEntity 正文返回 null?
- audio - 无法从视频文件中添加额外的音频 - 错误输出文件 #0 不包含任何流
- python - 使用 python 从 JSON 响应中获取特定的键和值?
- r - 我应该如何为包含 if 子句的整个列执行 for 循环(括号中也有错误,不知道为什么)