Conceitos básicos de tecnologia orientada a objetos
-
Classe: usada para descrever uma coleção de objetos com as mesmas propriedades e métodos. Ele define as propriedades e métodos comuns a cada objeto da coleção. Objetos são instâncias de classes. Simplificando, uma classe é um modelo e uma instância é um objeto criado com base na classe
-
**Variáveis de classe:** As variáveis de classe são públicas em todo o objeto instanciado. Variáveis de classe são definidas na classe e fora do corpo da função. Variáveis de classe geralmente não são usadas como variáveis de instância.
-
**Variáveis de instância:** Variáveis definidas em métodos atuam apenas na classe da instância atual.
-
**Membros de dados:** Variáveis de classe ou variáveis de instância são usadas para manipular dados relacionados à classe e seus objetos de instância.
-
**Método: **Função definida na classe.
-
**Instanciação:** Crie uma instância de uma classe, um objeto específico da classe.
-
**Objeto:** Uma instância de uma estrutura de dados definida por uma classe. Os objetos incluem dois membros de dados (variáveis de classe e variáveis de instância) e métodos.
-
Encapsulamento : coloque vários métodos ou propriedades em uma classe privada, e essa classe privada não será acessada por outros objetos.
-
**Herança:** Uma classe derivada herda os campos e métodos de uma classe base.
A herança permite que um objeto de uma classe derivada seja tratado como um objeto de classe base. Por exemplo, existe um design assim: um objeto do tipo Cachorro é derivado da classe Animal, então Cachorro também é um Animal.
-
**Reescrita de método:** Se o método herdado da classe pai não puder atender às necessidades da subclasse, ele poderá ser reescrito. Esse processo é chamado de substituição de método, também conhecido como reescrita de método.
-
Polimorfismo : Objetos diferentes, chamando o mesmo método da mesma classe, apresentam formas diferentes.
Herança, encapsulamento e polimorfismo são as três principais características da orientação a objetos. As classes podem realizar as três principais características da orientação a objetos.
Comparado com outras linguagens de programação, Python adiciona mecanismos de classe sem adicionar, tanto quanto possível, nova sintaxe e semântica.
Objetos em Python
-
Objetos são um dos conceitos mais básicos em Python. Em Python, tudo pode ser um objeto.
Python trata todos os dados como objetos e as instruções de atribuição criam objetos e variáveis na memória.
-
Os objetos têm três atributos básicos: tipo, identidade e valor
print(type(500)) # 输出:<class 'int'> # 对象的类型 print(id(500)) # 输出:2556827724176 # 对象的身份标识 print(500) # 输出:500 # 对象的值
Definição de classe
Descrição breve
Embora qualquer variável em python possa ser chamada de objeto, o objeto real é uma instanciação específica de atributos e métodos de classe. Somente usando classes você pode criar um objeto verdadeiro.
Em Python, as classes são definidas por meio da palavra-chave class , e a convenção geral para nomes de classes é colocar a primeira letra em maiúscula.
-
Defina o formato básico de uma classe:
class 类名(父类): pass # 此处可添加属性和方法 class 类名: pass # 此处可添加属性和方法
Observação:
-
Por padrão, todas as classes em Python3 herdam implicitamente a classe de objeto.Portanto, em Python3, é recomendado que você não precise herdar explicitamente a classe de objeto.
-
Classes internas em python, as classes internas de python não podem ser definidas apenas em classes, mas também em métodos
Atributos de classe
Dividido em dois tipos: atributos de classe e atributos de instância :
-
Atributos de classe : atributos vinculados à classe. Existe uma e somente uma cópia . É um atributo comum que pode ser acessado por cada instância.
-
Os atributos da classe podem ser chamados diretamente através da classe ou através de um objeto instanciado da classe, semelhante às constantes estáticas em Java
-
Nota: Alterar o valor de um atributo de classe através do objeto de instanciação da classe em python não modificará o valor da variável de classe!
Porque modificar os atributos de uma classe por meio de uma instância, na verdade, cria um atributo de instância para a instância com o mesmo nome do atributo de classe e, em seguida, modifica o atributo de instância . A prioridade de acesso do atributo de instância é maior que o atributo de classe , então o atributo de instância é acessado primeiro durante o acesso, o que bloqueará Remover o acesso aos atributos da classe
class Person: name = 'aaa'; person = Person() print(person.name) # 输出:aaa person.name = "bbb" print(person.name) # 输出:bbb print(Person.name) # 输出:aaa del person.name # 可以使用 del 删除与类属性同名的实例属性 print(person.name) # 输出:aaa
-
-
Atributos da instância : cada instância tem a sua própria e é independente uma da outra
Acesse as propriedades da instância:
- Dentro do método de instância, passe "self.property name"
- Fora da classe, acesse indiretamente chamando métodos de instância
**Propriedades de instância privada:** O nome da propriedade começa com um sublinhado (
_private_attrs
), indicando que a propriedade é declarada privada e não pode ser usada ou acessada diretamente fora da classe. A maneira de usá-lo em um método dentro de uma classe é:self._private_attrs
métodos de classe
Dentro de uma classe, use a palavra-chave def para definir funções. As funções definidas em uma classe também são chamadas de métodos.
-
Métodos de classe :
Em python, um método de classe é um método decorado pelo decorador @classmethod , indicando que é um método de classe
O primeiro parâmetro do método de classe é cls , que representa a própria classe. Isso permite que os métodos de classe acessem e modifiquem propriedades de classe e outros métodos de classe.
Os métodos de classe podem ser chamados diretamente através da classe ou através de um objeto instanciado da classe (não recomendado)
Herança de subclasse: as subclasses podem herdar e substituir métodos de classe da classe pai.
-
Método de instância :
Ao contrário das definições gerais de funções, o primeiro parâmetro formal de um método de instância deve ser self.O significado de self aqui se refere ao objeto instanciado.
Observação: self não é uma palavra-chave em Python, portanto, o primeiro parâmetro formal do método de instância pode, na verdade, ser nomeado por outro nome, mas a prática do setor é nomeá-lo como self.
Método de instância de chamada:
- Dentro do método de instância, passe "self.methodname()"
- Fora da classe, passe "nome do objeto. Nome do método da instância (exceto parâmetros próprios)"
-
Método estático:
Decorador: os métodos estáticos são definidos usando o decorador @staticmethod .
Parâmetros: Os métodos estáticos não possuem parâmetros especiais e não requerem uma referência à própria classe ou a uma instância. Eles são semelhantes às funções normais.
Não é possível acessar propriedades e métodos de classe: os métodos estáticos não podem acessar diretamente propriedades e métodos de classe porque não passam uma classe ou instância como parâmetro.
Não é necessário instanciar o objeto: métodos estáticos podem ser chamados a partir da própria classe sem instanciar o objeto. Por exemplo, MyClass.my_static_method()
Sem herança por subclasses: métodos estáticos não são herdados por subclasses porque não estão associados à classe ou instância.
Cenários comuns: Os métodos estáticos normalmente são usados para operações relacionadas à classe, mas não a uma instância específica, como funções utilitárias ou funções auxiliares.
-
Método privado :
Um método começando com dois sublinhados (
__private_method
) indica que o método é declarado como um método privado e não pode ser chamado fora da classe.O método de chamada dentro da classe é:
slef.__private_methods
funções especiais de classe
Existem principalmente os seguintes tipos:
-
__init__
(Função de inicialização): É chamada automaticamente ao chamar uma classe para criar um objeto para completar a inicialização do objeto.A função de inicialização em python não suporta sobrecarga de método. Existe apenas um
Em Python,
**map
a função de inicialização pode ser definida como uma transferência flexível de vários parâmetrosclass TestClassA: def __init__(self, a, b): print("我是python的构造方法"); class TestClassB: #定义灵活的可传递任何数据的构造方法 def __init__(self, **map): print("我是python的构造方法" + map.get("name")); print("我是python的构造方法" + map.get("age"));
Extensão:
__init__
O uso do método é semelhante ao método construtor em Java, mas não é um método construtor. O método de criação de uma instância em Python é.__new__
Este método é usado principalmente por padrão em Python e geralmente não precisa ser redefinido. -
__del__
(Destruidor): Será chamado automaticamente quando o objeto for recicladoTanto o construtor quanto o destruidor não precisam ser escritos ao definir a classe.
Herança de classe
-
Herança única
gramática:
class <类名>(父类名) <语句>
Exemplo:
class Student(people): grade = '' def __init__(self,n,a,w,g): #调用父类的构函 people.__init__(self,n,a,w) self.grade = g #覆写父类的方法 def speak(self): print("%s is speaking: I am %d years old,and I am in grade %d"%(self.name,self.age,self.grade)) s = Student('ken',20,60,3) s.speak()
-
Herança múltipla de classes
gramática:
class 类名(父类1, 父类2, ...., 父类n) <语句1>
Nota: a ordem das classes pai entre parênteses. Se houver o mesmo nome de método na classe pai, mas não for especificado ao usá-lo na subclasse, o Python pesquisa da esquerda para a direita, ou seja, quando o método não é encontrado na subclasse, ele pesquisa da esquerda para a direita para ver se o método está incluído na classe pai .