为什么我无法在 pydantic 中创建 HttpURL 的独立对象?

sva*_*mol 4 object python-3.x pydantic

from pydantic import BaseModel, Field, HttpUrl
from typing import Optional

class TestClass(BaseModel):
    url:Optional[HttpUrl] = None
Run Code Online (Sandbox Code Playgroud)

使用 url="https://www.test.com" 创建对象 TestClass 是可行的。

这里导入的HttpUrl或者BaseModel都是类。当我尝试独立创建 httpurl 对象时,它给出了 typeerror,例如下面的。

from pydantic import HttpUrl

myurl = HttpUrl("https://www.test.com")
    
Run Code Online (Sandbox Code Playgroud)

为什么它不能像上面那样用于将字符串转换为 http 对象。它会导致错误,例如: need keywords-only args if that isprovided then 2positionalprovided required 3

ale*_*roz 11

UPD 2023-10-30 (thanks Christoph H.) In Pydantic 2 you should use a TypeAdapter, since parse_obj_as was deprecated.

ta = TypeAdapter(HttpUrl)  
url = ta.validate_strings("test.com")
Run Code Online (Sandbox Code Playgroud)

(Only Pydantic 1.X) You can use parse_obj_as method. This way there will be fewer dependencies:

from pydantic import parse_obj_as, HttpUrl  
url = parse_obj_as(HttpUrl, "https://www.test.com")
Run Code Online (Sandbox Code Playgroud)