مقادیر پیشفرض و یا null

  • مدرس : علی بیگدلی
  • تاریخ انتشار: 1404/09/15
  • تعداد بازدید: 4

در Pydantic دو مفهوم بسیار مهم برای کنترل وضعیت فیلدها وجود دارد: Default Value (مقدار پیش‌فرض) و Nullable (قابل Null بودن – پذیرش مقدار None). این دو موضوع تعیین می‌کنند یک فیلد در هنگام ساخت مدل چگونه رفتار کند و آیا مقداردهی برای آن الزامی است یا خیر.

۱. Default Value — مقدار پیش‌فرض

اگر برای یک فیلد مقدار پیش‌فرض تعریف کنیم، آن فیلد دیگر اجباری نیست؛ یعنی لازم نیست هنگام ساخت مدل مقدار آن را بدهیم. Pydantic در صورت نبود مقدار، از مقدار پیش‌فرض استفاده می‌کند.

مثال:


from pydantic import BaseModel

class User(BaseModel):
    age: int = 18
    active: bool = True

# هیچ مقداری برای age و active ارسال نمی‌شود
User()

در این مثال:

  • age مقدار پیش‌فرض ۱۸ دارد.
  • active مقدار پیش‌فرض True دارد.
  • بنابراین فیلدها «اختیاری» می‌شوند اما مقدار آن‌ها None نیست، بلکه مقدار مشخصی دارند.

 

۲. Nullable — پذیرش مقدار None

nullable یعنی فیلد می‌تواند مقدار None داشته باشد. برای nullable بودن باید نوع فیلد اجازه پذیرش None داشته باشد.

راه‌های nullable کردن فیلد:

  • استفاده از Optional[type]
  • استفاده از type | None (روش جدید در پایتون 3.10+)

مثال:


from typing import Optional
from pydantic import BaseModel

class User(BaseModel):
    nickname: Optional[str]   # می‌تواند None باشد
    bio: str | None           # روش جدیدتر

User(nickname=None, bio=None)

نکته بسیار مهم: nullable بودن با داشتن مقدار پیش‌فرض تفاوت دارد.

۳. تفاوت Default Value با Nullable

ویژگی Default Value Nullable
نیاز به مقدار‌دهی هنگام ساخت مدل خیر (چون مقدار پیش‌فرض دارد) خیر (چون می‌تواند None باشد)
نوع مقدار همیشه مقدار واقعی دارد (نه None) ممکن است None باشد
مثال age: int = 18 nickname: str | None

۴. حالت‌های مختلف مقدار پیش‌فرض + nullable

الف) بدون مقدار پیش‌فرض و nullable


class User(BaseModel):
    nickname: str | None

User(nickname=None)  # OK
User()               # ❌ نیاز به مقدار (چون پیش‌فرض ندارد)

ب) nullable با مقدار پیش‌فرض


class User(BaseModel):
    nickname: str | None = None

User()               # OK
User(nickname=None)  # OK

در این حالت:

  • فیلد nullable است
  • مقدار پیش‌فرض هم دارد
  • بنابراین کاملاً «غیراجباری» است

 

نتیجه‌گیری:

  • Default Value ⇒ فیلد بدون مقدار هم مقدار دارد (غیراجباری ولی غیر None)
  • Nullable ⇒ فیلد می‌تواند مقدار None بگیرد
  • این دو کاملاً مستقل‌اند و می‌توانند با هم ترکیب شوند

ثبت دیدگاه


نکته: آدرس ایمیل شما منتشر نخواهد شد
0/600

دیدگاه کاربران (0)


هیچ دیدگاهی ثبت نشده است. می‌توانید اولین نفر باشید.