آموزش کلاس ها در پایتون، کلاسها و اشیاء از مفاهیم اصلی برنامهنویسی شیءگرا (OOP) هستند که در پایتون به صورت گسترده استفاده میشوند. کلاسها به عنوان قالبهایی برای ایجاد اشیاء عمل میکنند و اشیاء نمونههایی از این قالبها هستند.
1. معرفی کلاسها و اشیاء در پایتون
1.1 تعریف کلاس
برای تعریف یک کلاس در پایتون از کلمه کلیدی class استفاده میشود. یک کلاس میتواند شامل متدها (توابع داخل کلاس) و ویژگیها (متغیرهای داخل کلاس) باشد.
مثال ساده:
class Person:
# سازنده کلاس
def __init__(self, name, age):
self.name = name # ویژگی name
self.age = age # ویژگی age
# متد معرفی
def introduce(self):
print(f"سلام، من {self.name} هستم و {self.age} سال دارم.")
1.2 ایجاد اشیاء
برای ایجاد یک شیء از یک کلاس، کافی است نام کلاس را به همراه پارامترهای لازم فراخوانی کنید.
مثال:
# ایجاد یک شیء از کلاس Person
person1 = Person("علی", 25)
# دسترسی به ویژگیها
print(person1.name) # خروجی: علی
print(person1.age) # خروجی: 25
# فراخوانی متد
person1.introduce() # خروجی: سلام، من علی هستم و 25 سال دارم.
1.3 ویژگیها (Attributes)
ویژگیها متغیرهایی هستند که به یک شیء تعلق دارند. این ویژگیها میتوانند در متد سازنده (__init__) تعریف شوند یا به صورت مستقیم به شیء اضافه شوند.
مثال:
person2 = Person("زهرا", 30)
# اضافه کردن ویژگی جدید به شیء
define_attribute(person2, "job", "مهندس")
print(person2.job) # خروجی: مهندس
1.4 متدها (Methods)
متدها توابعی هستند که در داخل کلاس تعریف میشوند و میتوانند برای انجام عملیات مختلف روی اشیاء استفاده شوند. متدها همیشه باید پارامتر self را به عنوان اولین آرگومان بپذیرند.
مثال:
class Circle:
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14 * self.radius ** 2
def perimeter(self):
return 2 * 3.14 * self.radius
# ایجاد شیء از کلاس Circle
circle1 = Circle(5)
print(circle1.area()) # خروجی: 78.5
print(circle1.perimeter()) # خروجی: 31.4
1.5 وراثت (Inheritance)
وراثت به شما امکان میدهد تا یک کلاس جدید را بر اساس یک کلاس موجود تعریف کنید. این ویژگی باعث میشود تا کدهای تکراری کاهش یابد.
مثال:
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
print(f"{self.name} صدایی تولید میکند.")
class Dog(Animal):
def speak(self):
print(f"{self.name} میگوید: هاپ هاپ!")
# ایجاد اشیاء از کلاسهای Animal و Dog
animal = Animal("حیوان")
animal.speak() # خروجی: حیوان صدایی تولید میکند.
dog = Dog("سگی")
dog.speak() # خروجی: سگی میگوید: هاپ هاپ!
2. نحوه تعریف کلاس ها
تعریف کلاسها در پایتون
کلاسها در پایتون ابزارهایی برای تعریف قالبهای دادهای سفارشی هستند که ویژگیها (متغیرها) و رفتارها (متدها) را در بر میگیرند. ساختار کلی تعریف یک کلاس به صورت زیر است:
class ClassName:
def __init__(self, attribute1, attribute2):
self.attribute1 = attribute1
self.attribute2 = attribute2
def method_name(self):
# عملیات مربوط به این متد
pass
توضیحات:
- کلمه کلیدی
class: برای تعریف کلاس استفاده میشود. - نام کلاس: باید با حرف بزرگ شروع شود و نامگذاری معمولاً به صورت CamelCase است.
- متد
__init__: یک متد خاص است که هنگام ایجاد نمونهای از کلاس، به طور خودکار اجرا میشود و معمولاً برای مقداردهی اولیه ویژگیها استفاده میشود. - ویژگیها: متغیرهایی هستند که در متد
__init__تعریف میشوند و با استفاده ازselfمشخص میشوند. - متدها: توابعی هستند که رفتار کلاس را تعریف میکنند.
مثال:
class Car:
def __init__(self, brand, model, year):
self.brand = brand
self.model = model
self.year = year
def display_info(self):
print(f"{self.year} {self.brand} {self.model}")
# ایجاد یک نمونه از کلاس
my_car = Car("Toyota", "Corolla", 2020)
# دسترسی به متدهای کلاس
my_car.display_info()
خروجی:
2020 Toyota Corolla
3. ساختار کلاسها، متدها و خصوصیات
3.1 ساختار کلاسها در پایتون
کلاسها در پایتون برای تعریف قالبهای دادهای و رفتارهای آنها استفاده میشوند. ساختار کلی کلاس به شکل زیر است:
class ClassName:
def __init__(self, attribute1, attribute2):
self.attribute1 = attribute1
self.attribute2 = attribute2
def method_name(self):
# عملیات مربوط به این متد
pass
مثال ساده:
class Animal:
def __init__(self, species, sound):
self.species = species
self.sound = sound
def make_sound(self):
return f"The {self.species} says {self.sound}!"
cat = Animal("cat", "meow")
dog = Animal("dog", "woof")
print(cat.make_sound()) # خروجی: The cat says meow!
print(dog.make_sound()) # خروجی: The dog says woof!
3.2 خصوصیات (Attributes)
خصوصیات متغیرهایی هستند که متعلق به یک کلاس هستند و ویژگیهای اشیاء را توصیف میکنند. معمولاً در متد __init__ تعریف میشوند.
مثال برای خصوصیات:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
person1 = Person("Ali", 25)
person2 = Person("Zahra", 30)
print(person1.name) # خروجی: Ali
print(person1.age) # خروجی: 25
print(person2.name) # خروجی: Zahra
print(person2.age) # خروجی: 30
3.3 متدها (Methods)
متدها توابعی هستند که در داخل یک کلاس تعریف میشوند و رفتارهای اشیاء را تعریف میکنند. آنها معمولاً از ویژگیهای کلاس استفاده میکنند یا آنها را تغییر میدهند.
مثال برای متدها:
class Circle:
def __init__(self, radius):
self.radius = radius
def calculate_area(self):
return 3.14 * self.radius ** 2
def calculate_circumference(self):
return 2 * 3.14 * self.radius
circle1 = Circle(5)
print(circle1.calculate_area()) # خروجی: 78.5
print(circle1.calculate_circumference()) # خروجی: 31.400000000000002
3.4 انواع متدها
- متدهای نمونه (Instance Methods): این متدها به خصوصیات نمونه دسترسی دارند و با
selfمشخص میشوند. - متدهای کلاس (Class Methods): با دکوراتور
@classmethodتعریف میشوند و به کل کلاس دسترسی دارند. اولین آرگومان آنهاclsاست. - متدهای ایستا (Static Methods): با دکوراتور
@staticmethodتعریف میشوند و نیازی بهselfیاclsندارند.
مثال برای انواع متدها:
class Math:
@staticmethod
def add(x, y):
return x + y
@classmethod
def pi_value(cls):
return 3.14
def multiply(self, x, y):
return x * y
print(Math.add(3, 5)) # خروجی: 8
print(Math.pi_value()) # خروجی: 3.14
math_instance = Math()
print(math_instance.multiply(4, 6)) # خروجی: 24
مثال جامع:
class BankAccount:
def __init__(self, owner, balance=0):
self.owner = owner
self.balance = balance
def deposit(self, amount):
self.balance += amount
print(f"{amount} تومان به حساب اضافه شد. موجودی فعلی: {self.balance}")
def withdraw(self, amount):
if amount > self.balance:
print("موجودی کافی نیست.")
else:
self.balance -= amount
print(f"{amount} تومان برداشت شد. موجودی فعلی: {self.balance}")
def display_balance(self):
return f"موجودی حساب {self.owner}: {self.balance} تومان"
account = BankAccount("Sara", 1000)
account.deposit(500) # خروجی: 500 تومان به حساب اضافه شد. موجودی فعلی: 1500
account.withdraw(2000) # خروجی: موجودی کافی نیست.
account.withdraw(300) # خروجی: 300 تومان برداشت شد. موجودی فعلی: 1200
print(account.display_balance()) # خروجی: موجودی حساب Sara: 1200 تومان
4. وراثت و چندریختی
4.1 وراثت (Inheritance) در پایتون
وراثت یکی از مفاهیم اصلی برنامهنویسی شیءگرا است که به شما اجازه میدهد یک کلاس جدید ایجاد کنید که ویژگیها و رفتارهای یک کلاس دیگر را به ارث میبرد. این قابلیت به کاهش کد تکراری و افزایش قابلیت استفاده مجدد کمک میکند.
4.2 ساختار کلی وراثت:
class ParentClass:
def __init__(self, attribute):
self.attribute = attribute
def parent_method(self):
print("This is a method in the parent class")
class ChildClass(ParentClass):
def __init__(self, attribute, additional_attribute):
super().__init__(attribute)
self.additional_attribute = additional_attribute
def child_method(self):
print("This is a method in the child class")
مثال برای وراثت:
class Animal:
def __init__(self, name):
self.name = name
def make_sound(self):
print("Some generic animal sound")
class Dog(Animal):
def make_sound(self):
print("Woof Woof")
class Cat(Animal):
def make_sound(self):
print("Meow")
# استفاده از کلاسها
animal = Animal("Generic Animal")
animal.make_sound() # خروجی: Some generic animal sound
dog = Dog("Buddy")
dog.make_sound() # خروجی: Woof Woof
cat = Cat("Kitty")
cat.make_sound() # خروجی: Meow
4.3 چندریختی (Polymorphism) در پایتون
چندریختی به این معناست که یک متد یا عملیات میتواند در کلاسهای مختلف رفتارهای متفاوتی داشته باشد. این مفهوم به برنامهنویسان اجازه میدهد کدهای انعطافپذیرتری بنویسند.
مثال ساده از چندریختی:
class Shape:
def area(self):
pass
class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14 * self.radius ** 2
# استفاده از کلاسها
shapes = [Rectangle(3, 4), Circle(5)]
for shape in shapes:
print("Area:", shape.area())
خروجی:
Area: 12
Area: 78.5
