Directorio de artículos
Métodos __nuevo__ y __init__
class A(object):
def __init__(self):
print("这是 init 方法")
def __new__(cls):
print("这是 new 方法")
return object.__new__(cls)
A()
Resumir
__new__
Debe haber al menos un parámetrocls
, que representa la clase que se va a crear una instancia, y el intérprete de Python proporciona automáticamente este parámetro cuando se crea una instancia.__new__
Debe haber un valor de retorno que devuelva la instancia instanciada. Puede devolver__new__
la instancia de la clase principal o usarlaobject
directamente__new__
.__init__
Hay un parámetroself
, que es__new__
la instancia devuelta. Algunas otras acciones de inicialización se pueden completar sobre la base de__init__
. No se requiere ningún valor de retorno.__new__
__init__
patrón de diseño único
Para dar un ejemplo de un patrón común de singleton, hay una papelera de reciclaje en la computadora que usamos todos los días. En todo el sistema operativo, solo puede haber una instancia de la papelera de reciclaje. Todo el sistema usa esta instancia única, y el papelera de reciclaje proporciona su propia instancia de . Entonces, la Papelera de reciclaje es una aplicación del patrón singleton.
El patrón singleton garantiza que solo haya una instancia de una determinada clase, se crea una instancia y proporciona esta instancia a todo el sistema. La clase Singleton es un patrón de creación de objetos.
# 实例化一个单例
class Singleton(object):
__instance = None
__is_first = True
def __new__(cls, age, name):
if not cls.__instance:
cls.__instance = object.__new__(cls)
return cls.__instance
def __init__(self, age, name):
if self.__is_first: # 不会再创建第二个对象
self.age = age
self.name = name
Singleton.__is_first = False
a = Singleton(18, "张三")
b = Singleton(28, "张三")
print(id(a))
print(id(b))
print(a.age) # 18
print(b.age) # 18
a.age = 19
print(b.age)
__instance
es una variable de clase utilizada para almacenar instancias singleton.__is_first
Es una variable de clase que indica si la instancia se está creando por primera vez.__new__
se llama al método cuando se crea una instancia. Si__instance
esNone
, significa que aún no se ha creado ninguna instancia, y el método pasado en este momentoobject
crea__new__
una nueva instancia y la asigna a__instance
. Si__instance
noNone
, significa que la instancia se ha creado y la__instance
instancia actual se devuelve directamente.__init__
El método se llama después de la creación de instancias. Si es la primera vez que crea una instancia, realice una operación de inicialización. Dado que se establece__is_first
después de queFalse
, las instancias posteriores creadas no realizarán operaciones de inicialización.- Finalmente, imprima la dirección de memoria de la instancia
a
yb
descubra que son la misma instancia. - Imprime
a.age
yb.age
encuentra que sus valores son ambos18
, lo que indica que comparten el mismo atributo. - Modifíquelo
a.age
a19
, imprima de nuevob.age
y descubra que su valor también es el mismo19
, lo que indica que la modificación de los atributos de una instancia afectará a todas las demás instancias.
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