Loading...
Python

Կարող եք ձեր կոդը փորձարկել այստեղ

Python

Գլուխ 3. Օբյեկտ-կողմնորոշված ծրագրավորում

կլասի ատրիբուտներ և ստատիկ մեթոդներ

կլասի հատկանիշներ
Բացի կլասի օբյեկտների ատրիբուտներից, դուք կարող եք սահմանել կլասի ատրիբուտներ: Նման հատկանիշները սահմանվում են որպես կլասի մակարդակի փոփոխականներ: Օրինակ:
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 հատկանիշի նույն արժեքը դուրս կգա վահանակ: Հետեւաբար, նման մեթոդը կարելի է ստատիկ դարձնել:

Մեկնաբանություն գրելու համար խնդրում ենք մուտք լինել