引用静态属性会产生NameError

时间:2018-12-14 10:06:50

标签: python static

我有一个带有两个静态属性的类(对于每个实例而言都是如此)

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

就静态变量而言,我知道我可能会遗漏一些显而易见的东西,但无法确切地找出原因。

1 个答案:

答案 0 :(得分:2)

您无法从静态属性访问类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,但这实际上取决于您的用例。

这能回答您的问题吗?