Introdução e uso básico de classes Python e instâncias de objetos

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, **mapa função de inicialização pode ser definida como uma transferência flexível de vários parâmetros

    class 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 reciclado

    Tanto 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 .

Acho que você gosta

Origin blog.csdn.net/footless_bird/article/details/133251787
Recomendado
Clasificación