Хелпикс

Главная

Контакты

Случайная статья





@staticmethod 1 страница



О б ъ е к т н о -о р и е н т и р о в а н н о е п р о г р а м м и р о в а н и е

 

Д о с и х п о р н а ш и п р о г р а м м ы с о с т о я л и и з ф у н к ц и й, т. е. б л о к о в в ы р а ж е н и й, к о т о р ы е м а -н и п у л и р у ю т д а н н ы м и. Э т о н а з ы в а е т с я п р о ц е д у р н о -о р и е н т и р о в а н н ы м с т и л е м п р о г р а м -м и р о в а н и я. С у щ е с т в у е т и д р у г о й с п о с о б о р г а н и з а ц и и п р о г р а м м: о б ъ е д и н я т ь д а н н ы е

ф у н к ц и о н а л в н у т р и н е к о е г о о б ъ е к т а. Э т о н а з ы в а е т с я о б ъ е к т н о -о р и е н т и р о в а н н о й п а р а -д и г м о й п р о г р а м м и р о в а н и я. В б о л ь ш и н с т в е с л у ч а е в м о ж н о о г р а н и ч и т ь с я п р о ц е д у р н ы м п р о г р а м м и р о в а н и е м, а п р и н а п и с а н и и б о л ь ш о й п р о г р а м м ы и л и е с л и р е ш е н и е к о н к р е т -н о й з а д а ч и т о г о т р е б у е т, м о ж н о п е р е х о д и т ь к т е х н и к а м о б ъ е к т н о -о р и е н т и р о в а н н о г о п р о -г р а м м и р о в а н и я.

 

Д в а о с н о в н ы х а с п е к т а о б ъ е к т н о -о р и е н т и р о в а н н о г о п р о г р а м м и р о в а н и я – к л а с с ы и о б ъ е к -т ы. К л а с с с о з д а ё т н о в ы й т и п , а о б ъ е к т ы я в л я ю т с я э к з е м п л я р а м и к л а с с а. А н а л о г и ч н о, к о -г д а м ы г о в о р и м о «п е р е м е н н ы х т и п а int», э т о о з н а ч а е т, ч т о п е р е м е н н ы е, к о т о р ы е х р а н я т ц е л о ч и с л е н н ы е з н а ч е н и я, я в л я ю т с я э к з е м п л я р а м и (о б ъ е к т а м и ) к л а с с а int.

 

З а м е ч а н и е д л я п р о г р а м м и с т о в н а с т а т и ч е с к и х я з ы к а х

 

О б р а т и т е в н и м а н и е, ч т о д а ж е ц е л ы е ч и с л а р а с с м а т р и в а ю т с я к а к о б ъ е к т ы (к л а с с а int),

 

о т л и ч и е о т C++ и Java (д о в е р с и и 1. 5), г д е ц е л ы е ч и с л а я в л я ю т с я п р и м и т и в а м и. С м. help(int) д л я б о л е е д е т а л ь н о г о о п и с а н и я э т о г о к л а с с а. П р о г р а м м и с т ы н а C# и Java 1. 5 м о г у т з а м е т и т ь с х о д с т в о с к о н ц е п ц и е й у п а к о в к и и р а с п а к о в к и 1.

 

О б ъ е к т ы м о г у т х р а н и т ь д а н н ы е в о б ы ч н ы х п е р е м е н н ы х, к о т о р ы е п р и н а д л е ж а т о б ъ е к -т у. П е р е м е н н ы е, п р и н а д л е ж а щ и е о б ъ е к т у и л и к л а с с у, н а з ы в а ю т п о л я м и. О б ъ е к т ы м о г у т т а к ж е о б л а д а т ь ф у н к ц и о н а л о м, т. е. и м е т ь ф у н к ц и и, п р и н а д л е ж а щ и е к л а с с у. Т а к и е ф у н к -ц и и п р и н я т о н а з ы в а т ь м е т о д а м и к л а с с а. Э т а т е р м и н о л о г и я в а ж н а, т а к к а к о н а п о м о г а е т н а м о т л и ч а т ь н е з а в и с и м ы е ф у н к ц и и и п е р е м е н н ы е о т т е х, ч т о п р и н а д л е ж а т к л а с с у и л и о б ъ е к т у. В с ё в м е с т е (п о л я и м е т о д ы ) п р и н я т о н а з ы в а т ь а т р и б у т а м и к л а с с а.

 

П о л я б ы в а ю т д в у х т и п о в: о н и м о г у т п р и н а д л е ж а т ь к а ж д о м у о т д е л ь н о м у э к з е м п л я р у о б ъ -е к т а к л а с с а и л и в с е м у к л а с с у. О н и н а з ы в а ю т с я п е р е м е н н ы м и э к з е м п л я р а и п е р е м е н -н ы м и к л а с с а с о о т в е т с т в е н н о.

 

К л а с с с о з д а ё т с я к л ю ч е в ы м с л о в о м class. П о л я и м е т о д ы к л а с с а з а п и с ы в а ю т с я в б л о к е

 

boxing and unboxing


 

 


A Byte of Python (Russian), В е р с и я 2. 01

 

 

к о д а с о т с т у п о м.

 

 

14. 1 self

 

М е т о д ы к л а с с а и м е ю т о д н о о т л и ч и е о т о б ы ч н ы х ф у н к ц и й: о н и д о л ж н ы и м е т ь д о п о л н и -т е л ь н о и м я, д о б а в л я е м о е к н а ч а л у с п и с к а п а р а м е т р о в. О д н а к о, п р и в ы з о в е м е т о д а н и к а -к о г о з н а ч е н и я э т о м у п а р а м е т р у п р и с в а и в а т ь н е н у ж н о – е г о у к а ж е т Python. Э т а п е р е м е н -н а я у к а з ы в а е т н а с а м о б ъ е к т э к з е м п л я р а к л а с с а, и п о т р а д и ц и и о н а н а з ы в а е т с я self2.

 

Х о т я э т о м у п а р а м е т р у м о ж н о д а т ь л ю б о е и м я, н а с т о я т е л ь н о р е к о м е н д у е т с я и с п о л ь з о в а т ь т о л ь к о и м я self; и с п о л ь з о в а н и е л ю б о г о д р у г о г о и м е н и н е п р и в е т с т в у е т с я. Е с т ь м н о г о д о -с т о и н с т в и с п о л ь з о в а н и я с т а н д а р т н о г о и м е н и: в о -п е р в ы х, л ю б о й ч е л о в е к, п р о с м а т р и в а ю -щ и й в а ш у п р о г р а м м у, л е г к о у з н а е т е г о; в о -в т о р ы х, н е к о т о р ы е с п е ц и а л и з и р о в а н н ы е И н -т е г р и р о в а н н ы е с р е д ы р а з р а б о т к и (IDE) и з н а ч а л ь н о р а с с ч и т а н ы н а и с п о л ь з о в а н и е self.

 

З а м е ч а н и е д л я п р о г р а м м и с т о в н а C++, Java и C#

 

self в Python э к в и в а л е н т н о у к а з а т е л ю this в C++ и с с ы л к е this в Java и C#.

 

В ы, д о л ж н о б ы т ь, у д и в л я е т е с ь, к а к Python п р и с в а и в а е т з н а ч е н и е self и п о ч е м у в а м н е н у ж н о у к а з ы в а т ь э т о з н а ч е н и е с а м о с т о я т е л ь н о. П о я с н и м э т о н а п р и м е р е. П р е д п о л о ж и м,

 

н а с е с т ь к л а с с с и м е н е м MyClass и э к з е м п л я р э т о г о к л а с с а с и м е н е м myobject. П р и в ы з о -в е м е т о д а э т о г о о б ъ е к т а, н а п р и м е р, “myobject. method(arg1, arg2)”, Python а в т о м а т и ч е -с к и п р е в р а щ а е т э т о в “MyClass. method(myobject, arg1, arg2)” – в э т о м и с о с т о и т с м ы с л

self.

 

Э т о т а к ж е о з н а ч а е т, ч т о е с л и к а к о й -л и б о м е т о д н е п р и н и м а е т а р г у м е н т о в, у н е г о в с ё р а в -н о б у д е т о д и н а р г у м е н т – self.

 

 

14. 2 К л а с с ы

 

П р о с т е й ш и й к л а с с п о к а з а н в с л е д у ю щ е м п р и м е р е (с о х р а н и т е к а к simplestclass. py).

 

class Person:

 

pass #П у с т о й б л о к

 

p = Person()

 

print (p)

 

В ы в о д:

 

$ python3 simplestclass. py

 

< __main__. Person object at 0x019F85F0>

 

К а к э т о р а б о т а е т:

 

self – а н г л. «с а м » (п р и м. п е р е в. )


 

102                                 Г л а в а 14. О б ъ е к т н о -о р и е н т и р о в а н н о е п р о г р а м м и р о в а н и е


A Byte of Python (Russian), В е р с и я 2. 01

 

 

М ы с о з д а ё м н о в ы й к л а с с п р и п о м о щ и о п е р а т о р а class и и м е н и к л а с с а. З а э т и м с л е д у е т б л о к в ы р а ж е н и й, ф о р м и р у ю щ и х т е л о к л а с с а. В д а н н о м с л у ч а е б л о к у н а с п у с т, н а ч т о у к а з ы в а е т о п е р а т о р а pass.

 

Д а л е е м ы с о з д а ё м о б ъ е к т -э к з е м п л я р к л а с с а, з а п и с ы в а я и м я к л а с с а с о с к о б к а -м и. (М ы у з н а е м б о л ь ш е о р е а л и з а ц и и в с л е д у ю щ е м р а з д е л е ). Д л я п р о в е р к и м ы в ы я с н я е м т и п п е р е м е н н о й, п р о с т о в ы в о д я е ё н а э к р а н. Т а к м ы в и д и м, ч т о у н а с е с т ь э к з е м п л я р к л а с с а Person в м о д у л е __main__.

 

О б р а т и т е в н и м а н и е, ч т о в ы в о д и т с я т а к ж е и а д р е с в п а м я т и к о м п ь ю т е р а, г д е х р а н и т с я в а ш о б ъ е к т. Н а в а ш е м к о м п ь ю т е р е а д р е с б у д е т д р у г и м, т а к к а к Python х р а н и т о б ъ е к т ы т а м, г д е и м е е т с я с в о б о д н о е м е с т о.

 

 

14. 3 М е т о д ы о б ъ е к т о в

 

И т а к, м ы в ы я с н и л и ч т о к л а с с ы /о б ъ е к т ы м о г у т и м е т ь м е т о д ы, п р е д с т а в л я ю щ и е с о б о й ф у н к ц и и, з а и с к л ю ч е н и е м д о п о л н и т е л ь н о й п е р е м е н н о й self. А т е п е р ь д а в а й т е р а с с м о т -р и м п р и м е р (с о х р а н и т е к а к method. py).

 

class Person:

 

def sayHi(self):

 

print ('П р и в е т! К а к д е л а? ')

 

p = Person()

 

p. sayHi()

 

Э т о т к о р о т к и й п р и м е р м о ж н о т а к ж е з а п и с а т ь к а к Person(). sayHi()

 

В ы в о д:

 

$ python3 method. py

 

П р и в е т! К а к д е л а?

 

К а к э т о р а б о т а е т:

 

З д е с ь м ы в и д и м self в д е й с т в и и. О б р а т и т е в н и м а н и е, ч т о м е т о д sayHi н е п р и н и м а е т п а р а м е т р о в, н о т е м н е м е н е е, и м е е т self в о п р е д е л е н и и ф у н к ц и и.

 

14. 4 М е т о д __init__

 

С у щ е с т в у е т м н о г о м е т о д о в, и г р а ю щ и х с п е ц и а л ь н у ю р о л ь в к л а с с а х Python. С е й ч а с м ы у в и д и м з н а ч и т е л ь н о с т ь м е т о д а __init__.



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.