Classes/objetos Python
Quase tudo em Python é um objeto, com propriedades e métodos.
Uma classe é como um construtor de objetos ou um “modelo” para criar objetos.
Criar aula
Para criar uma classe, use class
a palavra-chave:
#如需创建类,请使用 class 关键字:
class MyClass:
name = '小明'
age = 11
Criar objeto
Agora podemos criar objetos usando a classe chamada myClass:
#现在我们可以使用名为 myClass 的类来创建对象:
p1 = MyClass()
print(p1.name)
#输出:小明
Função __init__()
Os exemplos acima são classes e objetos em sua forma mais simples e não são realmente úteis em aplicações reais.
Para entender o significado das classes, devemos primeiro entender as funções integradas __init__()
.
Todas as classes possuem uma função chamada __init__() que é sempre executada ao iniciar a classe.
Use a função __init__() para atribuir valores às propriedades do objeto ou outras operações que você precisa realizar ao criar um 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 objeto
Objetos também podem conter métodos. Os métodos em um objeto são funções que pertencem a esse 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 próprio
self
O parâmetro é uma referência à instância atual da classe e é usado para acessar variáveis pertencentes a essa classe.
Não precisa ter nome self
, você pode chamá-lo como quiser, mas deve ser o primeiro parâmetro de qualquer função da classe :
#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 小明
Propriedades do objeto
#修改对象属性
p1.name = '小红'
p1.myfunc()
#输出:Hello my name is 小红
#del 关键字删除对象的属性
del p1.age
print(p1.age)
#删除对象
del p1
Métodos __enter__ e __exit__
Para recursos do sistema, como arquivos, conexões de banco de dados e soquetes, após o aplicativo abrir esses recursos e executar a lógica de negócios, uma coisa que ele deve fazer é fechar (liberar) o 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')
Herança Python
A herança nos permite definir uma classe que herda todos os métodos e propriedades de outra classe.
A classe pai é a classe herdada, também conhecida como classe base.
Uma subclasse é uma classe que herda de outra classe, também conhecida como classe derivada.
Criar classe pai
#创建父类
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
Criar subclasse
#创建子类
class Student(Person):
pass
a = Student('小红', '12')
a.printname()
#输出:小红 12
Adicionar função __init__()
Até agora, criamos uma subclasse que herda as propriedades e métodos da classe pai.
#当您添加 __init__() 函数时,子类将不再继承父的 __init__() 函数。
#如需保持父的 __init__() 函数的继承,请添加对父的 __init__() 函数的调用:
class Student(Person):
def __init__(self, fname, lname):
Person.__init__(self, fname, lname)
a = Student('小红', '12')
a.printname()
#输出:小红 12
Use a função super()
Python também possui uma super()
função que faz com que uma classe filha herde todos os métodos e propriedades de sua classe pai:
#super() 函数,它会使子类从其父继承所有方法和属性:
class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
Adicionar 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