如何在复杂的__init__中使用Python中的数据类?

时间:2019-10-23 19:37:30

标签: python

例如,self.env具有复杂的实现。如何转让它以使用数据类?

class Request(object):

    def __init__(self, env: str, email: str, password: str):
        self.env = env if len(env) > 2 else 'default'
        self.email = email
        self.password = password

1 个答案:

答案 0 :(得分:3)

您需要按照文档中的说明实施__post_init__(self)方法。这样,您可以在初始化发生后添加验证步骤

@dataclass
class Request:
    env: str
    email: str
    password: str

    def __post_init__(self):
        self.env = self.env if len(self.env)>2 else 'default'

Request('a', 'hello@world.com', 'qwerty1234')
# returns:
Request(env='default', email='hello@world.com', password='qwerty1234')

Request('test2', 'hello@world.com', 'qwerty1234')
# returns:
Request(env='test2', email='hello@world.com', password='qwerty1234')