it-swarm-tr.com

Python sınıflarında kullanılan 'cls' değişkeni nedir?

Neden cls bazen self yerine Python sınıflarında bir argüman olarak kullanılır?

Örneğin:

class Person:
    def __init__(self, firstname, lastname):
        self.firstname = firstname
        self.lastname = lastname

    @classmethod
    def from_fullname(cls, fullname):
        cls.firstname, cls.lastname = fullname.split(' ', 1)
226
Scaraffe

_"self"_ ve _"cls"_ arasındaki fark PEP 8 içinde tanımlanmıştır. Adrien'in dediği gibi, bu zorunlu değildir. Bu bir kodlama tarzı. _PEP 8_ diyor ki:

İşlev ve yöntem argümanları :

Örnek yöntemlerine ilk argüman için her zaman self kullanın.

Sınıf yöntemlerine ilk argüman için her zaman cls kullanın.

250
Baskaya

Bir sınıf yöntemi durumunda kullanılır. Daha fazla ayrıntı için bu referans işaretini kontrol edin.

EDIT: Adrien tarafından açıklandığı gibi, bu bir kongre. Gerçekte herhangi bir şey kullanabilirsiniz, ancak cls ve self kullanılır ( PEP8 ).

50

cls, yöntemin sınıfa ait olduğunu belirtirken öz, yöntemin sınıf örneği ile ilgili olduğunu ima eder, bu nedenle cls üyesine üye, kendi sınıfına göre kendisinin erişildiği sınıf adıyla erişilir. sınıf ... Java arkaplanındaysanız Java içinde static member ve non-static members ile aynı kavramdır.

31
abdilatif bashir

Bu çok iyi bir soru ama soru kadar istemek değil. 'Ben' ve 'cls' kullanılan yöntem arasında benzerlik olsalar da benzer şekilde farklılıklar var.

def moon(self,moon_name):
    self.MName =moon_name

#but here cls method its use is different 


def moon(cls,moon_name):
    instance=cls()
    instance.MName=moon_name

Artık her ikisinin de ay işlevi olduğunu görebilirsiniz, ancak biri sınıf içinde kullanılabilirken ayın diğer adı da herhangi bir sınıf için kullanılabilir.

Pratik programlama yaklaşımı için:

Çember sınıfını tasarlarken area metodunu kendimiz yerine cls olarak kullanırız çünkü alanın sadece belirli çember sınıflarıyla sınırlı olmasını istemiyoruz.

14
TheExorcist