Կարող եք ձեր կոդը փորձարկել այստեղ
կլասի հատկանիշներ
Բացի կլասի օբյեկտների ատրիբուտներից, դուք կարող եք սահմանել կլասի ատրիբուտներ: Նման հատկանիշները սահմանվում են որպես կլասի մակարդակի փոփոխականներ: Օրինակ:
class Person:
type = "Person"
description = "Describes a person"
print(Person.type) # Person
print(Person.description) # Describes a person
Person.type = "Class Person"
print(Person.type) # Class Person
Այստեղ Person կլասը ունի երկու ատրիբուտ սահմանված՝ type, որը պահպանում է կլասի անվանումը և description, որը պահպանում է կլասի նկարագրությունը։
կլասի ատրիբուտներին մուտք գործելու համար մենք կարող ենք օգտագործել կլասի անունը, օրինակ՝ Person.type, և, ինչպես օբյեկտի ատրիբուտները, կարող ենք ստանալ և փոխել դրանց արժեքները։
Նմանատիպ հատկանիշները ընդհանուր են կլասի բոլոր օբյեկտների համար.
class Person:
type = "Person"
def __init__(self, name):
self.name = name
tom = Person("Tom")
bob = Person("Bob")
print(tom.type) # Person
print(bob.type) # Person
# изменим атрибут класса
Person.type = "Class Person"
print(tom.type) # Class Person
print(bob.type) # Class Person
կլասի ատրիբուտները կարող են օգտագործվել այնպիսի իրավիճակների համար, երբ մենք պետք է որոշ ընդհանուր տվյալներ սահմանենք բոլոր օբյեկտների համար: Օրինակ:
class Person:
default_name = "Undefined"
def __init__(self, name):
if name:
self.name = name
else:
self.name = Person.default_name
tom = Person("Tom")
bob = Person("")
print(tom.name) # Tom
print(bob.name) # Undefined
Այս դեպքում default_name հատկանիշը պահպանում է լռելյայն անունը: Եվ եթե անվան համար դատարկ տողը փոխանցվում է կոնստրուկտորին, ապա default_name կլասի հատկանիշի արժեքը փոխանցվում է name հատկանիշին։ Մեթոդների ներսում կլասի հատկանիշ մուտք գործելու համար կարող եք օգտագործել կլասի անունը
self.name = Person.default_name
կլասի հատկանիշ
Հնարավոր է, որ կլասի հատկանիշը և օբյեկտի հատկանիշը ունեն նույն անունը: Եթե ծածկագիրը արժեք չի սահմանում օբյեկտի հատկանիշի համար, ապա կլասի հատկանիշի արժեքը կարող է օգտագործվել դրա համար.
class Person:
name = "Undefined"
def print_name(self):
print(self.name)
tom = Person()
bob = Person()
tom.print_name() # Undefined
bob.print_name() # Undefined
bob.name = "Bob"
bob.print_name() # Bob
tom.print_name() # Undefined
Այստեղ print_name մեթոդը օգտագործում է օբյեկտի անվան հատկանիշը, բայց այս հատկանիշը դրված չէ կոդի մեջ որևէ տեղ: Բայց կլասի մակարդակում նշվում է name հատկանիշը: Հետևաբար, երբ առաջին անգամ զանգահարեք print_name մեթոդը, այն կօգտագործի կլասի հատկանիշի արժեքը.
tom = Person()
bob = Person()
tom.print_name() # Undefined
bob.print_name() # Undefined
Այնուամենայնիվ, հաջորդիվ մենք կարող ենք փոխել օբյեկտի սահմանված հատկանիշը.
bob.name = "Bob"
bob.print_name() # Bob
tom.print_name() # Undefined
Ավելին, երկրորդ օբյեկտը՝ tom-ը, կշարունակի օգտագործել class հատկանիշը։ Եվ եթե փոխենք class հատկանիշը, արժեքը tom.nameն ույնպես համապատասխանաբար կփոխվի.
tom = Person()
bob = Person()
tom.print_name() # Undefined
bob.print_name() # Undefined
Person.name = "Some Person" # меняем значение атрибута класса
bob.name = "Bob" # устанавливаем атрибут объекта
bob.print_name() # Bob
tom.print_name() # Some Person
Ստատիկ մեթոդներ
Բացի կանոնավոր մեթոդներից, կլասը կարող է սահմանել ստատիկ մեթոդներ: Նման մեթոդներին նախորդում է @staticmethod անոտացիան և վերաբերում է կլասին որպես ամբողջություն։ Ստատիկ մեթոդները սովորաբար սահմանում են վարքագիծ, որը անկախ է կոնկրետ օբյեկտից.
class Person:
__type = "Person"
@staticmethod
def print_type():
print(Person.__type)
Person.print_type() # Person
tom = Person()
tom.print_type() # Person
Այս դեպքում Person կլասը սահմանում է կլասի հատկանիշ __type, որը պահպանում է ամբողջ կլասի համար ընդհանուր արժեք՝ կլասի անվանումը։ Ավելին, քանի որ հատկանիշի անունին նախորդում է երկու ընդգծում, այս հատկանիշը կլինի մասնավոր, որը կպաշտպանի չարտոնված փոփոխություններից:
Person կլասը նաև սահմանում է ստատիկ մեթոդ print_type, որը տպում է __type հատկանիշի արժեքը կոնսոլում: Այս մեթոդի գործողությունը կախված չէ կոնկրետ օբյեկտից և ընդհանուր առմամբ կիրառվում է ամբողջ կլասի վրա. անկախ օբյեկտից, __type հատկանիշի նույն արժեքը դուրս կգա վահանակ: Հետեւաբար, նման մեթոդը կարելի է ստատիկ դարձնել:
Մեկնաբանություն գրելու համար խնդրում ենք մուտք լինել