Python`da Tanımlayıcı

| | | | | | | | | | |

Tanımlayıcı protokolü:
Diğer programlama dillerinde tanımlayıcılara ayarlayıcı ve alıcı adı verilir; burada genel işlevler özel bir değişken almak ve ayarlamak için kullanılır. Python`un özel değişken kavramı yoktur ve tanımlayıcı protokol, böyle bir şeyi başarmanın Pythonic bir yolu olarak düşünülebilir. Tanımlayıcılar — Python`da sınıfları uygulamanın yeni bir yoludur ve belirli bir nesneden herhangi bir şey devralması gerekmez. Tanımlayıcıları python`da kolayca uygulamak için yukarıda tanımlanan yöntemlerden en az birini kullanmalıyız. Aşağıdaki örneğin, öznitelik tarafından erişilen nesneyi döndürdüğünü ve sahibinin, tanıtıcının öznitelik olarak atandığı sınıf olduğunu unutmayın. Python tanımlayıcısında ayarlayıcılar, alıcılar ve bir silme yöntemi için üç protokol vardır.

  • gfg .__ get __ (self, obj, type = None) : Bu öznitelik, (değer = obj.attr) bilgisini almak istediğinizde çağrılır ve ne döndürürse — öznitelik değerini isteyen koda iletilecek olan budur.
  • gfg .__ set __ (self, obj, value) : Bu metot, ‚Äã‚Äã(obj .attr = 'a öznitelik değerlerini ayarlamak için çağrılır. 39; değer ') ve size hiçbir şey döndürmez.
  • gfg .__ delete __ (self, obj) : Bir nesneden bir öznitelik kaldırıldığında bu yöntem çağrılır (del obj.attr)

Tanımlayıcı çağırma:
Tanımlayıcılar, set() yöntemi veya için bir çağrı alındığında otomatik olarak çağrılır. >get() yöntemi. Örneğin, obj.gfg , obj sözlüğünde gfg`yi arar. gfg bir __get __ () yöntemini tanımlarsa, gfg .__ get __ (obj) . Ayrıca doğrudan yöntem adıyla da çağrılabilir, yani gfg .__ get __ (obj) .


# Python programını göster
# tanımlayıcı nasıl çağırılır

def __ getattribute __ ( self , anahtar):

v = nesne .__ getattribute __ ( self , anahtar)

if hasattr ( v, `__get__` ):

dönüş v .__ get __ ( Yok , self )

dönüş v

Hatırlanması gereken önemli noktalar:

  • Tanımlayıcılar __getattribute __ () yöntemiyle çağrılır.
  • __getattribute__ () geçersiz kılınması, tanımlayıcıya yapılan otomatik çağrıları engeller.
  • object .__ getattribute __ () ve tür .__ getattribute __ () __get __ ( ) için çeşitli çağrılar .
  • Veri tanımlayıcıları her zaman örnek sözlüklerini geçersiz kılar.
  • Veri olmayan tanımlayıcılar, örnek sözlükleri tarafından geçersiz kılınabilir.

Bir tanımlayıcı örneği:
Bu örnekte, bir veri tanımlayıcı genellikle ‚Äã‚Äã değerlerini ayarlar ve döndürür ve erişimlerini günlüğe kaydeden bir mesaj yazdırır.
Kod 1:


class Tanımlayıcı ( nesne < kod sınıfı = "düz">):

def __ init __ ( self , name = ` `):

self . ad = ad


def __ get __ ( self , obj, objtype):

dönüş " {} {} için "< /kod> . biçim ( öz .name, self .name)

def __ set __ ( self , nesne, ad):

if isinstance (name, str ):

self . ad = ad

başka :

yükseltme TypeError ( " Ad dize olmalıdır " )


class GFG ( nesne ):

name = Tanımlayıcı ()

g = GFG ()

g.name = "Geeks"

print (g.name)

Çıkış:

Python.Engineering

Kod 2:


< tbody>

class Tanımlayıcı ( nesne ):


def __ init __ ( self , name = ` `):

self . ad = ad


def __ get __ ( self , obj, objtype):

döndür {} için {} . biçim ( öz . ad, öz . ad)


def __ set __ ( self , obj, name ):

if isinstance ( name, str ):

self . ad = ad

başka :

yükseltme TypeError ( "Ad dize olmalıdır" >


sınıf GFG ( nesne ):

ad = Tanımlayıcı ()


g = GFG ()

g.name = "Bilgisayar"

yazdır ( g.name)

Çıkış:

 ComputerforComputer 

Özelliği () kullanarak bir tanıtıcı oluşturun:
özelliği () ile, herhangi bir nitelik için kullanılabilir bir tanımlayıcı oluşturmak kolaydır. property()

 özelliği oluşturmak için sözdizimi (fget = Yok, fset = Yok, fdel = Yok, doc = Yok) 

< tablo border = "0" cellpadding = "0" cellpacing = "0">

# Özelliği açıklamak için Python programı ( ) işlev


# Alfabe sınıfı

sınıf Alfabe:

def __ init __ ( self , değer):

self ._ value = değer


# değerleri alma ‚Äã‚Äã

def getValue ( se lf ):

print ( `Değer alma` )

dönüş self ._ value


# kurulum değerleri ‚Äã‚Äã

def setValue ( self , değer):

yazdır ( `Değer ayarlanıyor` + değer)

öz ._ değer = değer


# remo ve değerler ‚Äã‚Äã

def delValue ( self ):

yazdır ( `Değer siliniyor` )

del öz ._ değer


değer = özellik (getValue, setValue, delValue,)


# değeri iletin

x = Alfabe ( `GeeksforGeeks` )

print (x.value)


x.value = `GfG`

del x.value

Çıkış:

 Değer alma Python.Engineering Değeri GfG olarak ayarlama Değer silme 

Sınıf yöntemlerini kullanarak bir tanımlayıcı oluşturma:
Bunda oluşturduk Sınıfı alalım ve __set__ , __ get__ ve __delete__ .Bu yöntem, birçok farklı sınıf ve öznitelik için aynı tanımlayıcı gerektiğinde, örneğin tür denetimi için kullanılır.


class Tanımlayıcı ( nesne ):

def __ init__ ( self , name = ` `):

self .name = ad

def __ get __ ( self , obj, objtype):

dönüş " {} for {} " . biçim ( öz . ad, öz . ad)


def __ set __ ( self , obj, name ):

if isinstance (ad, str ):

self . ad = ad

başka :

yükselt TypeError ( "Ad dize olmalıdır" )


sınıf GFG ( nesne ):

ad = Tanımlayıcı ()


g = GFG ( )

g.name = "Geeks "

print (g.name)

< /kod>

Çıktı:

 Python.Engineering 

@property Dekoratörü kullanarak bir tanımlayıcı oluşturun:
Bunda bir özellik türü yöntemi ile Python dekoratörlerinin birleşimi olan özellik dekoratörlerinin gücünü kullanıyoruz.


class Alfabe:

def __ init __ ( self , değer):

self ._ değer = değer


# ‚Äã‚Äã

@ property

def değer ( öz ):

print ( `Değer alma` )

dönüş self ._ değer

# ayar değerleri ‚Äã‚Äã

< kod sınıfı = "dekoratör"> @ değeri . setter

def değer ( self , değer ):

yazdır ( `Değeri ` olarak ayarlama + value)

self ._ değer = değer


# değerleri kaldır ‚Äã‚Äã

@ value .deleter

def değer ( self ):

yazdır ( `Değer siliniyor` )

del self ._ value



# değeri iletin

x = Alfabe ( `Peter` )

print (x.value)


x.value = `Dizel`


del x.value

Çıkış: < / güçlü>

 Değer alma Peter Değeri Dizel olarak ayarlama Değer Silme 

Python`da Tanımlayıcı __del__: Questions

Python`da Tanımlayıcı __delete__: Questions

Shop

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Best laptop for Zoom

$499

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers

Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method