Directorio de artículos
metodo magico
Hay un método en Python llamado método mágico. Los métodos proporcionados en las clases de Python que comienzan con dos guiones bajos y terminan con dos guiones bajos son métodos mágicos. Los métodos mágicos se activarán y ejecutarán automáticamente cuando corresponda.
Dos características del método mágico:
- Dos guiones bajos en cada lado;
- El nombre "hechizo" ha sido definido oficialmente por Python, no podemos escribirlo al azar.
1. __init__
Método
__init__()
método, que se llama de forma predeterminada cuando se crea un objeto y no es necesario llamarlo manualmente. Durante el desarrollo, si desea establecer las propiedades del objeto mientras crea el objeto, puede __init__
modificar el método.
class Cat:
"""这是一个猫类"""
def __init__(self,name): # 重写了 `__init__` 魔法方法
self.name = name
def eat(self):
return "%s爱吃鱼"%self.name
def drink(self):
return '%s爱喝水'%self.name
"""
tom = Cat()
TypeError: __init__() missing 1 required positional argument: 'name'
这种写法在运行时会直接报错!因为 `__init__` 方法里要求在创建对象时,必须要传递 name 属性,如果不传入会直接报错!
"""
tom = Cat("Tom") # 创建对象时,必须要指定 name 属性的值
tom.eat() # tom爱吃鱼
Aviso:
__init__()
El método se llamará de forma predeterminada cuando se cree el objeto y no es necesario llamar a este método manualmente.__init__()
Los parámetros en el métodoself
no necesitan pasar parámetros al crear un objeto, y el intérprete de python le asignará directamente la referencia del objeto creadoself
.- Dentro de la clase, puede usar
self
atributos y métodos de llamada; fuera de la clase, debe usar el nombre del objeto para usar atributos y métodos de llamada. - Si hay varios objetos, los atributos de cada objeto se almacenan por separado y tienen sus propias direcciones independientes.
- El método es compartido por todos los objetos y solo ocupa un espacio de memoria. Cuando se llama al método, se utilizará para
self
determinar qué objeto llamó al método de instancia.
2. __del__
Método
Una vez que se crea el objeto, el intérprete de Python llama __init__()
al método de forma predeterminada; y cuando se elimina el objeto, el intérprete de Python también llama a un método de forma predeterminada, que es el método __del__()
.
class Student:
def __init__(self,name,score):
print('__init__方法被调用了')
self.name = name
self.score = score
def __del__(self):
print('__del__方法被调用了')
s = Student('lisi',95)
del s
input('请输入内容')
3. __str__
Método
__str__
El método devuelve la información de descripción del objeto. print()
Cuando la función se usa para imprimir el objeto, el método del objeto en realidad se llama __str__
.
class Cat:
def __init__(self,name,color):
self.name = name
self.color = color
tom = Cat('Tom','white')
# 使用 print 方法打印对象时,会调用对象的 __str__ 方法,默认会打印类名和对象的地址名
print(tom) # `<__main__.Cat object at 0x0000021BE3B9C940>`
Si desea modificar la salida del objeto, puede anular __str__
el método.
class Person:
def __init__(self,name,age):
self.name = name
self.age = age
def __str__(self):
return '哈哈'
p = Person('张三',18)
print(p) # 哈哈 打印对象时,会自动调用对象的 `__str__` 方法
En general, cuando imprimimos un objeto, es posible que necesitemos enumerar todas las propiedades del objeto.
class Student:
def __init__(self,name,score):
self.name = name
self.score = score
def __str__(self):
return '姓名是:{},成绩是{}分'.format(self.name,self.score)
s = Student('lisi',95)
print(s) # 姓名是:lisi,成绩是95分
4. __repr__
Método
__repr__
La función del método __str__
es similar a la del método, y ambos se utilizan para modificar el contenido de impresión predeterminado de un objeto. Al imprimir un objeto, si __str__
el método no se anula, automáticamente buscará __repr__
el método. Si ninguno de estos dos métodos está disponible, la dirección de memoria del objeto se imprimirá directamente.
class Student:
def __init__(self, name, score):
self.name = name
self.score = score
def __repr__(self):
return 'helllo'
class Person:
def __repr__(self):
return 'hi'
def __str__(self):
return 'good'
s = Student('lisi', 95)
print(s) # hello
p = Person()
print(p) # good
5. __call__
Método
Agregue paréntesis después del objeto para desencadenar la ejecución.
class Foo:
def __init__(self):
pass
def __call__(self, *args, **kwargs):
print('__call__')
obj = Foo() # 执行 `__init__`
obj() # 执行 `__call__`
Resumir:
- Cuando se crea un objeto,
__init__
el método se llama automáticamente y cuando se elimina un objeto,__del__
el método se llama automáticamente. - Usando
__str__
los métodos y__repr__
, ambos modifican el resultado de convertir un objeto en una cadena. En general,__str__
el resultado de un método tiene más que ver con la legibilidad, y__repr__
el resultado de un método tiene más que ver con la corrección (por ejemplo: la clase de fecha y hora en el módulo de fecha y hora).
Caso avanzado
[Python] Python se da cuenta del juego de adivinanzas: ¡desafía tu inteligencia y tu suerte!
[python] Use Selenium para obtener entradas (2023 Blog Star)
[Xiaobai debe ver] Python rastrea un ejemplo de datos de jugadores de la NBA
[Xiaobai debe ver] Visualización y procesamiento de datos del rastreador de Python
[Imprescindible para Xiaobai] Use Python para generar una lista personalizada de documentos de Word
Procesamiento y visualización de datos geoespaciales usando geopandas y shapely (.shp)
Utilice selenio para rastrear los datos de la lista de películas de Maoyan
Explicación detallada del principio y la implementación del algoritmo de mejora de imagen Retinex
Primeros pasos con los reptiles (1): aprenda los conceptos básicos y las habilidades de los reptiles
Conceptos básicos de programación orientada a objetos de Python y código de muestra
Guía de operación de archivos de Python: codificación, lectura, escritura y manejo de excepciones
Conjunto de herramientas de automatización de Selenium - Guía completa y tutoriales
Tutorial de los conceptos básicos del rastreador web de Python avanzados al combate real
Tutorial de procesamiento y análisis de datos de Pandas: desde lo básico hasta el combate real
Explicación detallada de los tipos de datos de uso común y las operaciones relacionadas en Python