AttributeError: 'int' object has no attribute
'lower'
Keling endi o'zimizning klasslarimizni yaratishni ko'ramiz.
ISHNI BAJARISH TARTIBI
Yangi klass yaratish uchun class operatoridan foydalanamiz va klassimizga
tushunarli nom beramiz. Esingizda bo'lsin, klass bu hali obyekt emas, bu obyekt
uchun shablon. Shuning uchun klass yaratishda shu klassdagi obyektlar uchun
umumiy bo'lgan xususiyatlar va funksiyalarni o'ylashimiz kerak.
Keling, Talaba degan klass yaratamiz:
class Talaba:
"""Talaba nomli klass yaratamiz"""
def __init__(self,ism,familiya,tyil):
"""Talabaning xususiyatlari"""
self.ism = ism
self.familiya = familiy
self.tyil = tyil
Copied!
Kodimizni tahlil qilamiz:
class Talaba
—
Talaba
nomli klass yaratdik. Klasslarga nom
berishda uning birinchi harfini katta harfdan boshlash tavsiya qilinadi. Agar
klass nomi 2 va undan ko'p so'zdan iborat bo'lsa har bir so'zni katta harf
bilan boshlang.
def __init__(self)
— klassga tegishli xususiyatlarni saqlovchi
maxsus metod (funksiya). self kalit so'zi ingliz tilidan "o'zi" deb tarjima
qilinadi, va bu klassdan yaratilgan obyektning o'ziga ishora qiladi. Ya'ni
keyinchalik biz obyekt ichidagi metodga murojat qilganimizda shu
obyektning o'zi birinchi bo'lib funksiyaga argument sifatida uzatiladi, obyket
ustida turli amallar bajarish imkonin beradi
def __init__(self,ism,familiya,tyil)
— yaratayotgan
klassimizga xos xususiyatlarni
def __init__(self)
funksiyasiga
argument sifatida uzatamiz. Bizning Talaba klassimiz ism, familiya va
tug'ilgan yilga ega bo'ladi.
Keyingi qatorlarda esa
self.xususiyat = argument
komandasi
yordamida uzatilgan argumentlarni klassning xususiyatlari bilan
bo'glayapmiz. Bu yerda xususiyat nomi uzatilgan argument nomi bilan mos
tushishi shart emas, unga istalgan nom berishimiz mumkin (masalan
self.name = ism
)
Klassimiz tayyor, keling endi klassimizdan yangi obyekt yaratamiz.
talaba1 = Talaba("Alijon","Valiyev",2000)
Copied!
Mana,
talaba1
obyektimiz tayyor. Obyektni yaratish uchun Talaba klassiga
murojat qildik va talabaning ismi, familiyasi va tug'ilgan yilini parameter sifatida
uzatdik.
Obyektning xususiyatlarini ko'rish uchun nuqta orqali murojat qilishimiz
mumkin.
print(talaba1.ism)
Copied!
Natija:
Alijon
print(talaba1.familiya)
Copied!
Natija:
Valiyev
Yuqoridagi klassdan biz istalgancha obyektlar yaratishimiz mumkin:
talaba2 = Talaba("Olim","Olimov",1995)
talaba3 = Talaba("Husan","Akbarov",2004)
talaba4 = Talaba("Hasan","Akbarov",2004)
Copied!
Bunda har bir obyekt o'zining alohida xususiyatlariga ega bo'ladi.
print(talaba2.ism
print(talaba4.familiya)
Copied!
Natija:
Olim
Akbarov
Obyektimizning xususiyatlarini aniqlab oldik, keling endi obyekt bajarishi kerak
bo'lgan metodlarni ham qo'shaylik.
class Talaba:
"""Talaba nomli klass yaratamiz"""
f __init__(self,ism,familiya,tyil)
"""Talabaning xususiyatlari"""
self.ism = ism
self.familiya = familiya
self.tyil = tyi
def tanishtir(self):
print(f"Ismim {self.ism} {self.familiya}. {self.tyil} yilda tu'gilganman")
Copied!
Boshlanishiga klassimizga bitta,
tanishtir
metodini qo'shdik. Bu metodimiz
ko'rib turganingizdek bitta
self
(ya'ni obyektning o'zini) argumentini qabul qiladi
va talaba haqidagi ma'lumotlarni konsolga chiqaradi.
Obyekt ichidagi funksiyaga ya'ni obyektning metodiga murojat qilamiz:
talaba4 = Talaba("Hasan","Akbarov",2004)
talaba4.tanishtir()
Copied!
Natija:
Ismim Hasan Akbarov. 2004 yilda tu'gilganman
Klassimiz istalgancha metodlardan iborat bo'lishi mumkin:
class Talaba:
"""Talaba nomli klass yaratamiz"""
def __init__(self,ism,familiya,tyil):
"""Talabaning xususiyatlari"""
self.ism = ism
self.familiya = familiya
self.tyil = tyil
def get_name(self):
"""Talabaning ismini qaytaradi"""
return self.ism
def get_lastname(self):
"""Talabaning familiyasini qaytaradi"""
return self.familiya
def get_fullname(self):
"""Talabaning ism-familiyasini qaytaradi"""
return f"{self.ism} {self.familiya}"
def tanishtir(self):
print(f"Ismim {self.ism} {self.familiya}. {self.tyil} yilda tu'gilganman")
Copied!
talaba1 = Talaba("Alijon","Valiyev",2000)
print(talaba1.get_fullname())
Copied!
Natija:
Alijon Valiyev
Yuqoridagi misolimizda barcha metodlar faqatgina self parametrini qabul
qilishayapti. Aslida, barcha funksiyalar kabi, klass ichidagi obyektlarni ham
boshqa argumentlar qabul qiladigan qilib yozish mumkin.
class Talaba:
"""Talaba nomli klass yaratamiz"""
def __init__(self,ism,familiya,tyil):
"""Talabaning xususiyatlari"""
self.ism = ism
self.familiya = familiya
self.tyil = tyil
def get_name(self)
"""Talabaning ismini qaytaradi"""
return self.ism
def get_lastname(self):
"""Talabaning familiyasini qaytaradi"""
return self.familiya def get_fullname(self):
"""Talabaning ism-familiyasini qaytaradi"""
return f"{self.ism} {self.familiya}"
def get_age(self,yil):
"""Talabaning yoshini qaytaradi"""
return yil-self.tyil def tanishtir(self):
print(f"Ismim {self.ism} {self.familiya}. {self.tyil} yilda tu'gilganman")
Copied!
Yuqorida klassimizga yangi
get_age(self,yil)
metodini qo'shdik. Bu
metod obyektning o'zidan tashqari, qo'shimcha,
yil
argumentini ham qabul qiladi
va talabaning yoshini qaytaradi.
talaba1 = Talaba("Alijon","Valiyev",2000)
print(talaba1.get_age(2021))
Copied!
Natija:
21
Pythonda hech qanday vazifani bajarmaydigan
pass
operatori mavjud. Bu
operatordan bo'sh metodlar yaratishda foydalanish mumkin. Misol uchun siz
klassingiz uchun muhim metodlarni bilasiz, lekin metod badani hali tayyor emas.
Agar metod badanini bo'sh qoldirsangiz, Python
IndentationError
xatosini
qaytaradi. Shunday xolatlarda, funksiya badaniga
pass
operatorini qo'yib
ketishimiz mumkin:
class User:
def __int__(self,name,username,email):
self.name = name
self.uname = username
self.mail = email
def describe():
pass
def get_email():
pass Copied!
Do'stlaringiz bilan baham: |