Notas de estudio de Python | 5 clases y objetos

Contenido de este capítulo: Comprender clases y objetos de una manera sencilla y fácil de entender.

Todos los códigos relevantes se pueden ver en https://github.com/hzyao/Python-Cookbook .
¡Es maravilloso aprender y practicar al mismo tiempo y descubrir con el tiempo! ¡Puede que sepa mejor si se comen juntos!

clases y objetos

En la vida, podemos organizar datos diseñando formularios, produciendo formularios y completándolos. ¡Venir! ¡ Comparemos con las clases del programa !

  • Formulario de diseño - clase de diseño (clase)
  • Imprimir formulario - crear objeto
  • Complete el formulario - asignación de atributos de objeto

Es decir, podemos usar clases para encapsular atributos y crear objetos uno por uno según la clase a usar.

1 Clases y Objetos

Sintaxis de uso de clase:

class 类名称:
		类的属性
		类的行为

对象 = 类名称()
"""
1. class是关键字,表示要定义类啦
2. 类的属性,即定义在类中的变量(成员变量)
3. 类的行为,即定义在类中的函数(成员方法)
"""

¿Cuál es exactamente el comportamiento (método) de una clase?

class Student:
		name = None
		age = None
		
		def say_hi(self):
				print(f"嗨大家好!我是{
      
      self.name}")

Student.name = "run"
Student.age = 18

print(Student.name)
print(Student.age)

De lo anterior podemos ver que no solo se pueden definir propiedades en una clase para registrar datos, sino que también se pueden definir funciones para registrar comportamiento. en:

  • Atributos (variables) definidos en una clase, los llamamos: variables miembro
  • El comportamiento (función) definido en la clase, lo llamamos: método miembro

¡De ahora en adelante, llamaremos a las funciones definidas dentro de los métodos de la clase !

Sintaxis de definición del método miembro:

Definir métodos miembro en una clase es básicamente lo mismo que definir funciones, pero aún existen diferencias sutiles:

def 方法名(self, 形参1, ......, 形参N):
				方法体

En la lista de parámetros de la definición del método, hay una selfpalabra clave que debe completarseself cuando se define el método miembro . Se utiliza para representar el significado del objeto de clase en sí . Cuando usamos el objeto de clase para llamar a un método, Python lo pasará automáticamente. Dentro del método, si deseas acceder a las variables miembro de la clase, debes utilizar .selfself

Nota: selfAunque la palabra clave aparece en la lista de parámetros, no ocupa la posición del parámetro y puede ignorarse al pasar parámetros.

class Student:
		name = None
		def say_hi(self):
				print(f"Hello 大家好 我是{
      
      self.name}")
		
		def say_hi2(self, msg):
				print(f"Hello 大家好 我是{
      
      self.name} {
      
      msg}")

stu1 = Student()
stu1.name = "run"
stu1.say_hi()                     # 调用的时候无需传参
stu1.say_hi2("很高兴认识大家!")     # 调用的时候,需要传msg参数

stu2 = Student()
stu2.name = "xmy"
stu2.say_hi()
stu2.say_hi2("嘿嘿嘿!")

Al pasar parámetros, selfse puede decir que es transparente, ¡ignórelo! ¡ Los parámetros msgvarían!

Por lo tanto, la sintaxis de definición de métodos de clase y miembro es la siguiente:

class 类名称:
		成员变量
		
		def 成员方法(self, 参数列表):
				成员方法体

对象 = 类名称()

Hemos aprendido que la sintaxis para crear objetos basados ​​en clases es 对象 = 类名称().

Entonces, ¿por qué tenemos que crear un objeto antes de poder usarlo?

Una clase es simplemente un "dibujo de diseño" dentro de un programa, y ​​las entidades (es decir, objetos) deben generarse en función del dibujo para que funcione correctamente. Esta rutina es lo que llamamos " programación orientada a objetos ": diseñar clases, crear objetos basados ​​en clases y usar objetos para completar un trabajo específico .

# 练习:设计一个闹钟类
class Clock:
    id = None       # 序列号
    price = None    # 价格

    def ring(self):
        print("beep")

clock1 = Clock()
clock1.id = "1220"
clock1.price = 9.99
print(f"id is {
      
      clock1.id}, price is {
      
      clock1.price}") 
clock1.ring()

clock2 = Clock()
clock2.id = "0324"
clock2.price = 8.88
print(f"id is {
      
      clock2.id}, price is {
      
      clock2.price}") 
clock2.ring()

2 Utilice el constructor para asignar valores a variables miembro

En el estudio anterior, asignamos valores a las propiedades de los objetos en orden, lo cual fue un poco engorroso. En realidad, ¡podemos hacer esto de una manera más eficiente! ¡Asigne valores a propiedades como parámetros de función!

Las clases de Python pueden usar **__init__()**métodos, llamados constructores .

  • Se ejecutará automáticamente al crear un objeto de clase (construir una clase) .
  • Al crear un objeto de clase (construir una clase), los parámetros entrantes se pasan automáticamente al método __init__ para su uso .
# 构造方法的名称:__init__
class Student:
    name = None
    age = None
    tel = None      # 这些可以省略 

    def __init__(self, name, age, tel):
        self.name = name
        self.age = age
        self.tel = tel
        print("done")

stu = Student("run", 18, "0324")
print(stu.name)
print(stu.age)
print(stu.tel)

Nota: El constructor también es un método miembro, no olvide proporcionarlo en la lista de parámetros self; y al definir variables miembro dentro del constructor, debe usar palabras clave self.

# 练习:学生信息录入
class Student:
    def __init__(self):
        self.name = input("请输入学生姓名:")
        self.age = int(input("请输入学生年龄:"))
        self.address = input("请输入学生地址:")

for i in range(1, 11):
    print(f"当前录入第{
      
      i}位学习信息,总共需录入10位学习信息")
    stu = Student()
    print(f"学生{
      
      i}信息录入完成,信息为:【学生姓名:{
      
      stu.name}, 年龄:{
      
      stu.age}, 地址:{
      
      stu.address}】")

3 Otros métodos de clase integrados

Dado que cada uno de estos métodos de clase integrados tiene sus propias funciones especiales, los llamamos métodos mágicos .

Hay muchos métodos mágicos, ¡comprendamos primero los más comunes! Por ejemplo: __init__(método de construcción), __str__(método de cadena), __lt__(comparación de símbolo mayor que, menor que), __le__(comparación de símbolo mayor o igual, menor o igual que), __eq__(== comparación de símbolo), etc.

3.1 str : método de cadena

Función: Controla el comportamiento de convertir clases en cadenas.

  • Nombre del método:__str__
  • Valor de retorno: cadena
  • Contenido: Personalízalo tú mismo
# __str__ 字符串方法
class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age

stu = Student("run", 18)
print(stu)
print(str(stu)) # 会输出内存地址

class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return f"name:{
      
      self.name}, age:{
      
      self.age}"

stu = Student("run", 18)
print(stu)
print(str(stu))

3,2 lt : <, > comparación de símbolos

Función: No es posible comparar dos objetos directamente, pero al implementar __lt__el método en la clase, se pueden completar las dos comparaciones al mismo tiempo: el símbolo mayor que y el símbolo menor que.

  • Nombre del método:__lt__
  • Pasar parámetros: other, otro objeto de clase
  • Valor de retorno: TrueoFalse
  • Contenido: Personalízalo tú mismo
# __lt__ 方法
class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __lt__(self, other):
        return self.age < other.age
    
stu1 = Student("run", 18)
stu2 = Student("xmy", 16)
print(stu1 < stu2) # False
print(stu1 > stu2) # True

class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age

stu1 = Student("run", 18)
stu2 = Student("xmy", 16)
print(stu1 < stu2) # 无法比较会报错

3.3 archivo : <=, >= comparación de símbolos

Función: Se puede utilizar para dos operadores de comparación <= y >=.

  • Nombre del método:__le__
  • Parámetros entrantes: otro, otro objeto de clase
  • Valor de retorno: TrueoFalse
  • Contenido: Personalízalo tú mismo
# __le__ 方法
class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __le__(self, other):
        return self.age <= other.age
    
stu1 = Student("run", 18)
stu2 = Student("xmy", 16)
print(stu1 <= stu2) # False
print(stu1 >= stu2) # True

3.4 eq : == comparación de símbolos

Función: Se puede utilizar en el operador de comparación ==.

  • Nombre del método:__eq__
  • Parámetros entrantes: otro, otro objeto de clase
  • Valor de retorno: TrueoFalse
  • Contenido: Personalízalo tú mismo
# __eq__ 方法
class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __eq__(self, other):
        return self.age == other.age
    
stu1 = Student("run", 18)
stu2 = Student("xmy", 18)
print(stu1 == stu2) # False

Resumir:

__init__: Método constructor, que se puede utilizar para establecer el comportamiento de inicialización al crear objetos de clase;

__str__: Se utiliza para implementar el comportamiento de convertir objetos de clase en cadenas;

__lt__: Se utiliza para comparar dos objetos de clase por menor o mayor que;

__le__: Se utiliza para comparar dos objetos de clase por menor o igual o mayor o igual que;

__eq__: Se utiliza para comparar la igualdad de dos objetos de clase.

Supongo que te gusta

Origin blog.csdn.net/weixin_43843918/article/details/131795124
Recomendado
Clasificación