Python (quatro) orientado a objetos

1. Objeto

1. O que é um objeto ?

Um objeto é uma área de memória dedicada ao armazenamento de dados. Os objetos podem armazenar vários dados (como números, booleanos, códigos, etc.).

  • O objeto consiste em três partes:

    ①A identificação do objeto (id)
    ②O tipo do objeto (tipo)
    ③O valor do objeto (valor)

2. Ideias de programação

Python é uma linguagem de programação orientada a objetos.

  • Orientado ao processo: Orientado ao processo refere-se a decompor a lógica do nosso programa passo a passo, o que fazer primeiro
  • Orientado a objetos : Orientado a objetos refere-se a atribuir nossos programas a objetos para operar, o que você faz?

insira a descrição da imagem aqui

Em segundo lugar, a classe (classe)

(1) Definição de uma classe

1. O que é uma aula ?

Definir uma classe é definir um modelo para essa classe de objetos e definir suas propriedades e métodos. As classes também são objetos.

2. Atributos e métodos de classe

  • As variáveis ​​se tornarão propriedades da instância da classe e todas as instâncias da classe poderão acessar as propriedades na forma de object.property name
  • A função se tornará o método da instância da classe , e todas as instâncias da classe podem chamar o método na forma de object.methodname ()

(2) Criar uma classe

1, a estrutura básica da classe


class 类名([父类]) :#class关键字来声明一个类

    公共的属性...

    # 对象的初始化方法,类的构造方法
    def __init__(self,...):
        ...

    # 其他的方法    
    def method_1(self,...):
        ...

    def method_2(self,...):
        ...

2. Construtor de classe (método mágico) _ init _

3. self no método da classe

  • Toda vez que o método é chamado, o analisador passará automaticamente o primeiro argumento, o primeiro parâmetro é a classe de chamadao próprio objeto de instância, portanto, pelo menos um parâmetro formal deve ser definido no método . Geralmente, chamaremos esse parâmetro de self.

  • Self só existe em métodos de classe, funções independentes não precisam carregar self. self é necessário ao definir um método de uma classe, embora não seja necessário passar os parâmetros correspondentes ao chamá-lo.

  • Você pode vincular várias propriedades de um objeto a self. self.val = val, que significa atribuir o valor do parâmetro externo val ao atributo de instância val do objeto de instância atual da classe Myclass.

  • self não é uma palavra-chave de python, e pode ser nomeado por outros nomes, mas por uma questão de especificação e fácil compreensão dos leitores, é recomendado usar self.

  • Se você não adicionar self, significa que é um atributo da classe (pode ser referenciado por "class name.variable name"), e adicionar self significa que é um atributo de uma instância da classe (pode ser referenciado por "nome da instância.nome da variável" ).

class Person:
    def say_hello(a):#方法每次被调用时,解析器都会自动传递第一个实参
        print('a参数:'.rjust(9,' '),a)#第一个参数,就是调用方法的对象本身,也就是类的实例本身

p1 = Person()#创建实例p1
print('实例对象p1:',p1)
p1.say_hello()

print('*'*100)
p2 = Person()#创建实例p2
print('实例对象p2:',p2)
p2.say_hello()

insira a descrição da imagem aqui

class Human():
    val = '哈哈哈'#类的属性,公共的属性
    def __init__(self,val = '我是人类'):#类的初始化方法,注意:构造方法的返回值必须是"None"
        self.val = val #通过self向类实例中初始化属性

    def yellow_people(self,val = '我是黄种人'):#类的方法(函数)
        self.val = val 
        self.val1 = '我自豪'
        return self.val,self.val1#多个返回值

    def white_people(self,val = '我是白种人'):
        self.val = val 
        return self.val

print(Human.val)#Human是一个类,通过Human.val(类名.变量名)可以引用类的属性,输出:哈哈哈
print(Human().val)#Human()创建了一个类的实例,val变量加了self,表示类的实例Human()的一个属性,通过Human().val(实例名.变量名)引用,输出:我是人类
print(Human().yellow_people())

insira a descrição da imagem aqui
Compreensão de si mesmo em python

3. Encapsulamento, Herança, Polimorfismo

As três principais características da orientação a objetos:
Encapsulamento: para garantir a segurança dos dados
no objeto Herança: para garantir a extensibilidade do objeto
Polimorfismo: para garantir a flexibilidade do programa

(1) Encapsulamento

Encapsulamento, como o nome indica, é encapsular o conteúdo em algum lugar e, em seguida, chamar o conteúdo de encapsulado em algum lugar.
Para o encapsulamento orientado a objeto, na verdade é usar o construtor para encapsular o conteúdo no objeto e, em seguida, obter o conteúdo encapsulado direta ou indiretamente por meio do objeto.

(2) Herança

Uma nova classe é formulada com base em uma classe, que pode não apenas herdar as propriedades e métodos da classe original, mas também adicionar novas propriedades e métodos. A classe original é chamada de classe pai e a nova classe é chamada de classe filha.

# 定义一个类 Animal(动物),这个类中需要三个方法:run() sleep() bark()
class Animal:
    def run(self):
        print('动物会跑~~~')

    def sleep(self):
        print('动物睡觉~~~')

    def bark(self):
        print('动物嚎叫~~~')

# 有一个类,能够实现我们需要的大部分功能,但是不能实现全部功能
# 如何能让这个类来实现全部的功能呢?
#   ① 直接修改这个类,在这个类中添加我们需要的功能
#       - 修改起来会比较麻烦,并且会违反OCP原则
#   ② 直接创建一个新的类
#       - 创建一个新的类比较麻烦,并且需要大量的进行复制粘贴,会出现大量的重复性代码
#   ③ 直接从Animal类中来继承它的属性和方法
#       - 继承是面向对象三大特性之一
#       - 通过继承我们可以使一个类获取到其他类中的属性和方法
#       - 在定义类时,可以在类名后的括号中指定当前类的父类(超类、基类、super)
#           子类(衍生类)可以直接继承父类中的所有的属性和方法
#
#  通过继承可以直接让子类获取到父类的方法或属性,避免编写重复性的代码,并且也符合OCP原则
#   所以我们经常需要通过继承来对一个类进行扩展
class Dog(Animal):
    def bark(self):
        print('汪汪汪~~~')

    def run(self):
        print('狗跑~~~~')

class Hashiqi(Dog):
    def fan_sha(self):
        print('我是一只傻傻的哈士奇')

d = Dog()
h = Hashiqi()

d.run()#多态
d.sleep()#继承
d.bark()#多态
h.fan_sha()

insira a descrição da imagem aqui

(3) Polimorfismo

Quando a subclasse e a superclasse tiverem o mesmo método, o método da subclasse substituirá o método da superclasse, e esse código sempre chamará o método da subclasse em tempo de execução, que é polimorfismo.

Quatro, vários métodos orientados a objetos

(1) Método estático ( @staticmethod )

(2) Método de classe (@classmethod)

(3) Método de propriedade (@property)

class Person:
    def __init__(self,name,age):
        self._name = name
        self._age = age

    # property装饰器,用来将一个get方法,转换为对象的属性
    # 添加为property装饰器以后,我们就可以像调用属性一样使用get方法
    # 使用property装饰的方法,必须和属性名是一样的
    @property    
    def name(self):
        print('get方法执行了~~~')
        return self._name

    # setter方法的装饰器:@属性名.setter
    @name.setter    
    def name(self , name):
        print('setter方法调用了')
        self._name = name        

    @property
    def age(self):
        return self._age

    @age.setter    
    def age(self , age):
        self._age = age   

        

p = Person('猪八戒',18)

p.name = '孙悟空'
p.age = 28

print(p.name,p.age)

insira a descrição da imagem aqui

Cinco, orientação a objetos avançada

6. Módulos e pacotes

Referências:
1. Python orientado a objetos (quatro)
2. Explicação abrangente e detalhada orientada a objetos Python

Acho que você gosta

Origin blog.csdn.net/shammy_feng/article/details/117063531
Recomendado
Clasificación