Pooya Dowlat Abadi
Pooya Dowlat Abadi
خواندن ۲ دقیقه·۳ سال پیش

برنامه‌های سازمان‌ یافته‌تر در پایتون - قسمت سوم - ساخت یک پکیج

اگر دو قسمت قبل رو دنبال کرده باشید با ساختار کلی پکیج‌ها و ماژول‌ها در پایتون آشنا شدید و با روش‌های اضافه‌کردن یک پکیج به سیستم ویندوزی، مک یا لینوکسی خودتون هم آشنا شدید و نحوه کار با sys.path هم گفته شد.

توی این قسمت می‌خوایم که یک پکیج برای خودمون بسازیم و توی قسمت‌های بعد هم با اون پکیج کار کنیم و یک برنامه مرتب‌تر و منظم‌تر توی پایتون داشته باشیم

برای ساخت یک پکیج توی ide یا idle و یا هر گونه دیگه‌ای که با پایتون کد می‌زنید یک پروژه جدید ایجاد کنید

توجه داشته باشید که بعد از ساختن این پروژه جدید همون‌طوری که در قسمت قبل گفتیم به sys.path اونو اضافه کنید

مرحله اول اینه که یک دایرکتوری بسازید و اسم دلخواه خودتون رو بهش بدید و داخل اون یک اسکریپت پایتونی(فایل پایتونی) با اسم __init__ با فرمت py بسازید

معمولا داخل فایل __init__ خالی هستش

و ساختار دایرکتوری که من استفاده کردم هم به صورت زیر هست

Projectname - addtosyspath - package_root - __init__.py

چند تا نکته در مورد فایل __init__:

  1. این فایل معمولا خالی هستش
  2. از ورژن پایتون ۳.۳ به بعد نیازی به ایجاد این فایل نیست
  3. با این که نیازی به ایجادش نیست اما وجود داشتنش به کسی که کد رو می‌خونه می‌گه که این دایرکتوری قرار بوده که یک پکیج باشه و این خیلی اوقات مفیده



تا این مرحله ما یک پکیج‌خالی ساختیم اما با کدهایی که معمولا میبینیم کمی متفاوت تر هستش به عنوان مثال کد زیر رو در نظر بگیرید و اگر بخوایم ما هم یک ساختار این شکلی داشته باشیم باید چه کارهایی انجام بدیم؟

import urllib.request with urllib.request.urlopen('http://python.org/') as response: html = response.read()

خب پس باید کمی ادامه بدیم

یک فایل جدید داخل پروژه‌تون ایجاد کنید به اسم content_reader.py و در کنار __init__ و داخلش کدهای زیر رو می‌نویسیم

class MultiReader: def __init__(self, filename): self.filename = filename self.f = open(filename, 'rt') def close(self): self.f.close() def read(self): return self.f.read()

در مورد کدهای زیر موضوعی که وجود داره اینه که یک کلاس تعریف شده با یک تابع که باعث میشه بتونیم کلاس رو با پاس دادن مقادیر ایجاد کنیم و دو تابع که یکی مسئول بستن فایل و یکی مسئول خوندن محتویات اون هستش

برگردیم به کنسول‌مون

همین‌طوری که میبینید ابتدا دایرکتوری اولیه ایجاد شده رو به sys.path اضافه می‌کنیم و بعدش کلاس ایجاد شده رو به صورت زیر import می‌کنیم و از فانکشن read برای خواندن محتویات یک فایل تستی استفاده می‌کنیم

import package_root.content_reader data = package_root.content_reader.MutliReader(&quotaddtosyspath/package_root/test&quot) data.read()

که محتویات فایلی که ساختیم رو بهمون میده.

امیدوارم این قسمت براتون مفید بوده باشه


pythonpython3oopپایتون
شاید از این پست‌ها خوشتان بیاید