Clases/objetos de Python
Casi todo en Python es un objeto, con propiedades y métodos.
Una clase es como un constructor de objetos o un "modelo" para crear objetos.
crear clase
Para crear una clase, use class
la palabra clave:
#如需创建类,请使用 class 关键字:
class MyClass:
name = '小明'
age = 11
Crear objeto
Ahora podemos crear objetos usando la clase llamada myClass:
#现在我们可以使用名为 myClass 的类来创建对象:
p1 = MyClass()
print(p1.name)
#输出:小明
Función __init__()
Los ejemplos anteriores son clases y objetos en su forma más simple y no son realmente útiles en aplicaciones reales.
Para comprender el significado de las clases, primero debemos comprender las funciones integradas __init__()
.
Todas las clases tienen una función llamada __init__() que siempre se ejecuta al iniciar la clase.
Utilice la función __init__() para asignar valores a las propiedades del objeto u otras operaciones que necesite realizar al crear un objeto:
#__init__() 函数
#创建名为 Person 的类,使用 __init__() 函数为 name 和 age 赋值:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p1 = Person("小明", 11)
print(p1.name, p1.age)
#输出:小明 11
Métodos de objetos
Los objetos también pueden contener métodos. Los métodos de un objeto son funciones que pertenecen a ese objeto.
#对象也可以包含方法。对象中的方法是属于该对象的函数。
class Person1:
def __init__(self, name, age):
self.name = name
self.age = age
#self 参数是对类的当前实例的引用,用于访问属于该类的变量
def myfunc(self):
print("Hello my name is " + self.name)
p1 = Person1("小明", 11)
p1.myfunc()
#输出:Hello my name is 小明
parámetro propio
self
El parámetro es una referencia a la instancia actual de la clase y se utiliza para acceder a variables que pertenecen a esa clase.
No es necesario que tenga nombre self
, puedes llamarlo como quieras, pero debe ser el primer parámetro de cualquier función de la clase :
#self 参数是对类的当前实例的引用,用于访问属于该类的变量
#它不必被命名为 self,您可以随意调用它,但它必须是类中任意函数的首个参数:
class Person3:
def __init__(mysillyobject, name, age):
mysillyobject.name = name
mysillyobject.age = age
def myfunc(abc):
print("Hello my name is " + abc.name)
p1 = Person3("小明", 12)
p1.myfunc()
#输出:Hello my name is 小明
Propiedades del objeto
#修改对象属性
p1.name = '小红'
p1.myfunc()
#输出:Hello my name is 小红
#del 关键字删除对象的属性
del p1.age
print(p1.age)
#删除对象
del p1
Métodos __enter__ y __exit__
Para los recursos del sistema, como archivos, conexiones de bases de datos y sockets, después de que la aplicación abre estos recursos y ejecuta la lógica empresarial, una cosa que debe hacer es cerrar (liberar) el recurso.
#当离开 with 代码块的时候,系统会自动调用 __exit__() 方法, with 的作用和使用 try/finally 语句是一样的
class Testwith(object):
'''
with 包含了 __enter__ 和 __exit__ 方法
'''
def __enter__(self):
print('run now ')
def __exit__(self, exc_type, exc_val, exc_tb):
if exc_tb is None:
print('exit normal ')
else:
print('exit with exception')
#首先执行expression里面的__enter__函数,它的返回值会赋给as后面的variable。
#–>然后,开始执行with-block中的语句,不论成功失败(比如发生异常、错误,设置sys.exit()),在with-block执行完成后,会执行expression中的__exit__函数。
with Testwith():
print('test')
#抛出异常
raise NameError('Exception')
Herencia de Python
La herencia nos permite definir una clase que hereda todos los métodos y propiedades de otra clase.
La clase padre es la clase heredada, también conocida como clase base.
Una subclase es una clase que hereda de otra clase, también conocida como clase derivada.
Crear clase padre
#创建父类
class Person:
def __init__(self, fname, age):
self.firstname = fname
self.age = age
def printname(self):
print(self.firstname, self.age)
# 使用 Person 来创建对象,然后执行 printname 方法:
x = Person("小明", "12")
x.printname()
#输出:小明 12
Crear subclase
#创建子类
class Student(Person):
pass
a = Student('小红', '12')
a.printname()
#输出:小红 12
Agregar la función __init__()
Hasta ahora, hemos creado una subclase que hereda las propiedades y métodos de la clase principal.
#当您添加 __init__() 函数时,子类将不再继承父的 __init__() 函数。
#如需保持父的 __init__() 函数的继承,请添加对父的 __init__() 函数的调用:
class Student(Person):
def __init__(self, fname, lname):
Person.__init__(self, fname, lname)
a = Student('小红', '12')
a.printname()
#输出:小红 12
Utilice la función super()
Python también tiene una super()
función que hace que una clase hija herede todos los métodos y propiedades de su clase padre:
#super() 函数,它会使子类从其父继承所有方法和属性:
class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
Agregar método de atributo
#添加属性方法
class Student(Person):
def __init__(self, fname, lname, year):
super().__init__(fname, lname)
self.graduationyear = year
def welcome(self):
print("Welcome", self.firstname, self.age, "to the class of", self.graduationyear)
x = Student("小明", "12", 2019)
print(x.graduationyear)
#输出:2019
x.welcome()
#输出:Welcome 小明 12 to the class of 2019