python - 对静态属性的引用会产生 NameError
问题描述
我有以下具有两个静态属性的类(每个实例通用)
class Seller:
fields = {
"url": True,
"availability": False,
"visibility": False,
"country": False,
"origin_website": False
}
required_fields = [f for f in Seller.fields.keys() if Seller.fields[f]]
def __init__(self):
...
尝试创建卖方实例时,出现以下错误。
required_fields = [f for f in Seller.fields.keys() if fields[f]]
NameError: name 'Seller' is not defined
我试图删除Seller
引用,但它会产生另一个错误
required_fields = [f for f in fields.keys() if fields[f]]
NameError: name 'fields' is not defined
我知道就静态变量而言,我可能会错过一些明显的东西,但无法弄清楚究竟是什么。
解决方案
您不能Seller
从静态属性访问类,因为这些是在类被实例化且尚未绑定到名称时被实例化的Seller
。有几种方法可以解决这个问题:
1.使用继承
class SellerBase:
fields = {
"url": True,
"availability": False,
"visibility": False,
"country": False,
"origin_website": False
}
class Seller(SellerBase):
required_fields = [f for f in SellerBase.fields.keys() if SellerBase.fields[f]]
def __init__(self):
...
2.稍后分配属性
class Seller:
fields = {
"url": True,
"availability": False,
"visibility": False,
"country": False,
"origin_website": False
}
def __init__(self):
...
Seller.required_fields = [f for f in Seller.fields.keys() if Seller.fields[f]]
3. 将字段移出Seller
fields = {
"url": True,
"availability": False,
"visibility": False,
"country": False,
"origin_website": False
}
class Seller:
required_fields = [f for f in fields.keys() if fields[f]]
def __init__(self):
...
我很可能会使用选项 3,但这实际上取决于您的用例。
这回答了你的问题了吗?
推荐阅读
- php - Apache Event + PHP FPM 并允许 URL 重写
- tensorflow - 如果层被冻结但 is_training 为真,BatchNorm 是否会在 Tensorflow 中进行训练?
- java - 当您有自定义用户模型时,如何在 Spring Boot 中设置角色?
- java - 如何获取嵌套类型的所有类型的内部结构?
- angular - 安装了 Angular 版本 6.1.3 但 ng 版本显示版本 Angular CLI: 9.0.4
- ssl - 打开 SSL 证书
- python - 如何在我的正则表达式结果中排除我的开始搜索词和结束搜索词,同时尝试在两个词之间找到句子中的词
- git - Git 同步特定分支文件夹 Rundeck
- ruby - Capybara 302 重定向得到空白页面
- c# - 具有作用域角色的 Microsoft.AspNetCore.Identity