我有一个带有两个静态属性的类(对于每个实例而言都是如此)
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
就静态变量而言,我知道我可能会遗漏一些显而易见的东西,但无法确切地找出原因。
答案 0 :(得分:2)
您无法从静态属性访问类Seller
,因为它们是在实例化类时实例化的,并且尚未绑定到名称Seller
。有两种解决方法:
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):
...
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]]
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,但这实际上取决于您的用例。
这能回答您的问题吗?