Python - பரம்பரை
பரம்பரை மற்றொரு வகுப்பிலிருந்து அனைத்து முறைகள் மற்றும் பண்புகளையும் பெறும் ஒரு வகுப்பை வரையறுக்க அனுமதிக்கிறது.
பெற்றோர் வகுப்பு
பெயர்: பெற்றோர் வகுப்பு / அடிப்படை வகுப்பு
செயல்பாடு: மரபுரிமையாக வழங்கப்படுகிறது
எடுத்துக்காட்டு: Person வகுப்பு
குழந்தை வகுப்பு
பெயர்: குழந்தை வகுப்பு / பெறப்பட்ட வகுப்பு
செயல்பாடு: மரபுரிமையாகப் பெறுகிறது
எடுத்துக்காட்டு: Student வகுப்பு
பெற்றோர் வகுப்பை உருவாக்குதல்
எந்தவொரு வகுப்பும் பெற்றோர் வகுப்பாக இருக்க முடியும், எனவே தொடரியல் வேறு எந்த வகுப்பையும் உருவாக்குவதற்கும் ஒன்றுதான்:
எடுத்துக்காட்டு
Person என்று பெயரிடப்பட்ட ஒரு வகுப்பை உருவாக்கவும், firstname மற்றும் lastname பண்புகளுடன், மற்றும் ஒரு printname முறையுடன்:
class Person:
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname
def printname(self):
print(self.firstname, self.lastname)
# Person வகுப்பைப் பயன்படுத்தி ஒரு பொருளை உருவாக்கவும், பின்னர் printname முறையை செயல்படுத்தவும்:
x = Person("John", "Doe")
x.printname() # Output: John Doe
வகுப்பு கட்டமைப்பு:
வகுப்பு பெயர்: Person
பண்புகள்: firstname, lastname
முறைகள்: __init__(), printname()
பயன்பாடு: பொதுவான நபர் தரவுகளைக் கையாளுதல்
குழந்தை வகுப்பை உருவாக்குதல்
மற்றொரு வகுப்பிலிருந்து செயல்பாட்டைப் பெறும் ஒரு வகுப்பை உருவாக்க, குழந்தை வகுப்பை உருவாக்கும்போது பெற்றோர் வகுப்பை ஒரு அளவுருவாக அனுப்பவும்:
எடுத்துக்காட்டு
Student என்று பெயரிடப்பட்ட ஒரு வகுப்பை உருவாக்கவும், இது Person வகுப்பிலிருந்து பண்புகள் மற்றும் முறைகளைப் பெறும்:
class Student(Person):
pass
# Student வகுப்பைப் பயன்படுத்தி ஒரு பொருளை உருவாக்கவும், பின்னர் printname முறையை செயல்படுத்தவும்:
x = Student("Mike", "Olsen")
x.printname() # Output: Mike Olsen
கவனிக்க:
வகுப்பிற்கு வேறு எந்த பண்புகளையும் அல்லது முறைகளையும் சேர்க்க விரும்பாதபோது pass முக்கியச்சொல்லைப் பயன்படுத்தவும்.
மரபுரிமை பாய்வு:
பெற்றோர் வகுப்பு: Person
→ பெறப்பட்டது: firstname, lastname (பண்புகள்)
→ பெறப்பட்டது: __init__(), printname() (முறைகள்)
குழந்தை வகுப்பு: Student
தற்போதைய நிலை: Person இன் அனைத்து பண்புகள் மற்றும் முறைகளும்
__init__() செயல்பாட்டைச் சேர்த்தல்
இதுவரை நாம் அதன் பெற்றோரிடமிருந்து பண்புகள் மற்றும் முறைகளைப் பெறும் ஒரு குழந்தை வகுப்பை உருவாக்கியுள்ளோம்.
குழந்தை வகுப்பில் (pass முக்கியச்சொல்லுக்குப் பதிலாக) __init__() செயல்பாட்டைச் சேர்க்க விரும்புகிறோம்.
குறிப்பு:
__init__() செயல்பாடு வகுப்பு ஒரு புதிய பொருளை உருவாக்க பயன்படுத்தப்படும் ஒவ்வொரு முறையும் தானாகவே அழைக்கப்படுகிறது.
குழந்தை வகுப்பில் __init__() சேர்த்தல்
class Student(Person):
def __init__(self, fname, lname):
# பண்புகள் முதலியன சேர்க்கவும்.
pass
சிக்கல்: பெற்றோரின் __init__() மரபுரிமை இழக்கப்படுகிறது
முடிவு: firstname, lastname தொடங்கப்படவில்லை
சரியான __init__() செயல்பாடு
class Student(Person):
def __init__(self, fname, lname):
Person.__init__(self, fname, lname)
# கூடுதல் தொடக்கம்
தீர்வு: பெற்றோரின் __init__() ஐ வெளிப்படையாக அழைக்கவும்
முடிவு: firstname, lastname சரியாக தொடங்கப்படுகிறது
முக்கிய குறிப்பு:
குழந்தையின் __init__() செயல்பாடு பெற்றோரின் __init__() செயல்பாட்டின் மரபுரிமையை மேலெழுதுகிறது.
super() செயல்பாட்டைப் பயன்படுத்துதல்
Python குழந்தை வகுப்பு அதன் பெற்றோரிடமிருந்து அனைத்து முறைகள் மற்றும் பண்புகளையும் பெறும் super() செயல்பாட்டையும் கொண்டுள்ளது:
class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
# கூடுதல் தொடக்கம்
வெளிப்படையான அழைப்பு
class Student(Person):
def __init__(self, fname, lname):
Person.__init__(self, fname, lname)
முறை: பெற்றோர் வகுப்பு பெயரைக் குறிப்பிடுகிறது
நன்மை: தெளிவானது
குறைபாடு: பெற்றோர் பெயர் மாறினால் புதுப்பிக்க வேண்டும்
super() பயன்பாடு
class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
முறை: பெற்றோர் வகுப்பு பெயரைக் குறிப்பிடவில்லை
நன்மை: பராமரிப்பு எளிதானது
குறைபாடு: குறைவான வெளிப்படையானது
உதவிக்குறிப்பு:
super() செயல்பாட்டைப் பயன்படுத்துவதன் மூலம், நீங்கள் பெற்றோர் உறுப்பின் பெயரைப் பயன்படுத்த வேண்டியதில்லை, அது தானாகவே அதன் பெற்றோரிடமிருந்து முறைகள் மற்றும் பண்புகளைப் பெறும்.
பண்புகளைச் சேர்த்தல்
எடுத்துக்காட்டு 1: நிலையான பண்பு
class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
self.graduationyear = 2019 # நிலையான ஆண்டு
x = Student("Mike", "Olsen")
print(x.graduationyear) # Output: 2019
print(x.firstname) # Output: Mike
print(x.lastname) # Output: Olsen
எடுத்துக்காட்டு 2: மாறி பண்பு
class Student(Person):
def __init__(self, fname, lname, year):
super().__init__(fname, lname)
self.graduationyear = year # மாறி ஆண்டு
x = Student("Mike", "Olsen", 2019)
print(x.graduationyear) # Output: 2019
y = Student("Anna", "Smith", 2020)
print(y.graduationyear) # Output: 2020
மரபுரிமை விரிவாக்கம்:
பெற்றோர் பண்புகள்: firstname, lastname
குழந்தை பண்புகள்: graduationyear (புதியது!)
மொத்த பண்புகள்: firstname, lastname, graduationyear
பெறப்பட்டது: பெற்றோரிடமிருந்து
சேர்க்கப்பட்டது: குழந்தையில் புதிதாக
முறைகளைச் சேர்த்தல்
எடுத்துக்காட்டு
Student வகுப்பில் welcome என்ற முறையைச் சேர்க்கவும்:
class Student(Person):
def __init__(self, fname, lname, year):
super().__init__(fname, lname)
self.graduationyear = year
def welcome(self):
print("Welcome", self.firstname, self.lastname,
"to the class of", self.graduationyear)
# பயன்பாடு
x = Student("Mike", "Olsen", 2019)
x.printname() # பெறப்பட்ட முறை: Mike Olsen
x.welcome() # புதிய முறை: Welcome Mike Olsen to the class of 2019
முறை மேலெழுதுதல்:
குழந்தை வகுப்பில் பெற்றோர் வகுப்பில் உள்ள ஒரு செயல்பாட்டின் அதே பெயரில் ஒரு முறையைச் சேர்க்கினால், பெற்றோர் முறையின் மரபுரிமை மேலெழுதப்படும்.
class Person:
def introduction(self):
print("I am a person")
class Student(Person):
def introduction(self): # பெற்றோர் முறையை மேலெழுதுகிறது
print("I am a student")
x = Student()
x.introduction() # Output: I am a student (பெற்றோர் முறை அல்ல)
பல மரபுரிமை நிலைகள்
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def introduce(self):
print(f"I am {self.name}, {self.age} years old")
class Student(Person):
def __init__(self, name, age, student_id):
super().__init__(name, age)
self.student_id = student_id
def study(self):
print(f"{self.name} is studying")
class GraduateStudent(Student):
def __init__(self, name, age, student_id, research_topic):
super().__init__(name, age, student_id)
self.research_topic = research_topic
def research(self):
print(f"{self.name} is researching {self.research_topic}")
# பயன்பாடு
grad_student = GraduateStudent("Alice", 25, "S12345", "AI")
grad_student.introduce() # பெறப்பட்டது: Person இலிருந்து
grad_student.study() # பெறப்பட்டது: Student இலிருந்து
grad_student.research() # புதியது: GraduateStudent இல்
மரபுரிமை சங்கிலி:
நிலை 1: Person (அடிப்படை வகுப்பு)
→ பெறப்பட்டது: name, age, introduce()
நிலை 2: Student (Person இலிருந்து பெறப்பட்டது)
→ பெறப்பட்டது: Person இன் அனைத்தும் + student_id, study()
நிலை 3: GraduateStudent (Student இலிருந்து பெறப்பட்டது)
→ பெறப்பட்டது: Student இன் அனைத்தும் + research_topic, research()
நடைமுறை எடுத்துக்காட்டு
# பெற்றோர் வகுப்பு: வாகனம்
class Vehicle:
def __init__(self, brand, model, year):
self.brand = brand
self.model = model
self.year = year
def start(self):
print(f"{self.brand} {self.model} starting...")
def stop(self):
print(f"{self.brand} {self.model} stopping...")
# குழந்தை வகுப்பு 1: கார்
class Car(Vehicle):
def __init__(self, brand, model, year, doors):
super().__init__(brand, model, year)
self.doors = doors
def honk(self):
print(f"{self.brand} {self.model} honking!")
# குழந்தை வகுப்பு 2: மோட்டார் சைக்கிள்
class Motorcycle(Vehicle):
def __init__(self, brand, model, year, has_sidecar):
super().__init__(brand, model, year)
self.has_sidecar = has_sidecar
def wheelie(self):
print(f"{self.brand} {self.model} doing a wheelie!")
# பயன்பாடு
my_car = Car("Toyota", "Camry", 2020, 4)
my_car.start() # பெறப்பட்டது: Toyota Camry starting...
my_car.honk() # புதியது: Toyota Camry honking!
my_bike = Motorcycle("Harley", "Davidson", 2019, False)
my_bike.start() # பெறப்பட்டது: Harley Davidson starting...
my_bike.wheelie() # புதியது: Harley Davidson doing a wheelie!
வகை சரிபார்ப்பு மற்றும் isinstance()
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
print("Animal sound")
class Dog(Animal):
def speak(self):
print("Woof!")
class Cat(Animal):
def speak(self):
print("Meow!")
# உறவுகளை சரிபார்த்தல்
dog = Dog("Buddy")
cat = Cat("Whiskers")
print(isinstance(dog, Dog)) # True
print(isinstance(dog, Animal)) # True (Dog என்பது Animal இன் துணைவகுப்பு)
print(isinstance(dog, Cat)) # False
print(isinstance(cat, Cat)) # True
print(isinstance(cat, Animal)) # True (Cat என்பது Animal இன் துணைவகுப்பு)
# பல்வகைத்தன்மை
animals = [dog, cat]
for animal in animals:
animal.speak() # ஒவ்வொரு வகைக்கும் சரியான ஒலி
# Output: Woof!
# Meow!
பயிற்சி
பிழை ஏற்படாமல் இருக்க, வெற்று வகுப்பிற்குள் பயன்படுத்த சரியான முக்கியச்சொல் எது?
பயிற்சி கேள்வி:
சிறந்த நடைமுறைகள்
super() பயன்படுத்தவும்: பெற்றோர் வகுப்பு பெயர் மாறினால் குறியீட்டைப் புதுப்பிக்க தேவையில்லை
isinstance() பயன்படுத்தவும்: type() க்குப் பதிலாக, துணைவகுப்புகளைக் கணக்கில் எடுத்துக்கொள்கிறது