Método 29 vinculante y método no vinculante

Primero, el método vinculante

Las funciones definidas en la clase se dividen en dos categorías: métodos vinculados y métodos no vinculados.

Los métodos de enlace se dividen en métodos de objeto vinculados a objetos y métodos de clase vinculados a clases .

La función normalmente definida en la clase está vinculada al objeto por defecto, y después de agregar un decorador @classmethod a una función, la función está vinculada a la clase.

Importación Configuración        # archivo de conjunto en el archivo de configuración para los datos almacenados en su propia 

clase de MySQL:
     DEF  la __init__ (Ser, IP, puerto): 
        self.ip = IP 
        self.port = Puerto 

    DEF FUNC (Ser):
         Imprimir ( ' % S: S% ' % (self.ip, self.port)) 

    @classmethod # la siguiente función con destino a un método de decoración clase 
    DEF from_conf (CLS):
         Imprimir (CLS)
         de retorno CLS (settings.IP, settings.PORT) 

# obj1 = Mysql ('1.1.1.1', 3306) 

obj2 = Mysql.from_conf ()
print (obj2. __dict__ )

PD: El método vinculado a la clase es específicamente para la clase, pero de hecho, el objeto también se puede llamar, pero el primer parámetro que se pasa automáticamente sigue siendo la clase, lo que significa que dicha llamada no tiene sentido y es fácil de causar. Confusión, esta es también una de las diferencias entre el sistema de objetos de Python y otros sistemas de objetos de lenguaje orientado a objetos.Por ejemplo, en Smalltalk y Ruby, el método vinculado a la clase se distingue estrictamente del método vinculado al objeto.

 

Segundo, el método no vinculante

Después de agregar un decorador @staticmethod a una función en la clase , la función se convierte en un método independiente, también conocido como método estático. Este método no se une a la clase u objeto, la clase de objeto puede venir a llamarlo, pero es una función normal solamente, y por lo tanto no pasa automáticamente el valor luego decir

clase de MySQL:
     DEF  la __init__ (Ser, IP, puerto): 
        self.nid = self.create_id () 
        self.ip = IP 
        self.port = Puerto 

    @staticmethod # Las siguientes funciones decorados como un método estático 
    DEF create_id ():
         Importación UUID
         volver uuid.uuid4 () 

    @classmethod 
    DEF F1 (CLS):
         Pass 

    DEF F2 (Self):
         Pass 
OBJ1 = MySQL ( ' 1.1.1.1 ' , 3306 ) 

Mysql.create_id () 
obj1.create_id ()

print (Mysql.create_id)   # 普通 函数 , 无 绑定 方法 <función Mysql.create_id en 0x00000173EFB9B310>   
print (Mysql.f1)          # <método enlazado Mysql.f1 de <clase '__main __. Mysql' >> 
print (obj1.f1 )           # <método enlazado Mysql.f1 de <clase '__main __. Mysql' >>

Resumen: el uso de métodos vinculados y métodos no vinculados: si se necesita una función en la clase, el código de implementación de la función debe referirse al objeto para definirlo como un método de objeto, y si necesita referirse a la clase, definirlo como un método de clase sin referencia Las clases u objetos los definen como métodos estáticos.

 

Supongo que te gusta

Origin www.cnblogs.com/zhubincheng/p/12684417.html
Recomendado
Clasificación