python wtforms.validators 的validate验证 为什么要两个参数呢

最近在学flask框架 写到注册登录这里 有一个疑问是 在做验证码和邮箱是否存在吻合的验证时重写了validate函数
          但是不理解网上的用法,为什么会传self,field两个参数
class RegisterForm(wtforms.Form):
    # 做字数的基础判断验证
    username = wtforms.StringField(validators=[length(min=3, max=20)])
    email = wtforms.StringField(validators=[email()])
    captcha = wtforms.StringField(validators=[length(min=4, max=4)])
    # 密码一定要设置为两百以上 因为后面会使用加密 字符串会很长 所以最少设置为200
    password = wtforms.StringField(validators=[length(min=6, max=20)])
    password_confirm = wtforms.StringField(validators=[EqualTo("password")])


    # 判断验证码是否和数据库的一致
    def validate_captcha(self,field):
        captcha = field.data
        email = self.email.data
        captcha_model = EmailCaptchaModel.query.filter_by(email=email).first()
        # 如果captcha_model 不存在 或者数据库captch字段不等于表单captcha字段
        if not captcha_model or captcha_model.captcha.lower() != captcha.lower():
            # 异常返回
            raise wtforms.ValidationError("邮箱验证码错误")

    # 判断email是否存在
    def validate_email(self,field):
        email = field.data
        user_model = UserModel.query.filter_by(email=email).first()
        if user_model:
            raise wtforms.ValidationError("邮箱已经存在!")


是能正常运行的,此处就没有截图了 但是我在想为什么不能全部用self.email.data这样的方式写呢 field的意义是什么呢