Herança de classes em Python


prefácio

  Ao escrever uma aula, você nem sempre precisa começar do zero. Quando entre uma classe a ser escrita e outra classe que já existeExiste uma certa relação de herançaquando você puderReutilização de código por herançaO objetivo é melhorar a eficiência do desenvolvimento. Veja como implementar herança em Python .


1. A gramática básica da herança

  herança éUma das características mais importantes da programação orientada a objetos, que se origina do processo de compreensão das pessoas sobre o mundo objetivo e é um fenômeno comum na natureza. Por exemplo, cada um de nós herda algumas características físicas de nossos avós e pais, mas cada um de nós é diferente de nossos pais porque cada um de nós tem algumas características que são únicas para nós e não refletidas em nossos pais. . Implementando herança no design do programa, expressandoEsta classe possui todos os membros públicos ou protegidos da classe da qual herda. Na programação orientada a objetos,classe herdadachamada de classe pai ou base ,nova classeChamada de subclasse ou classe derivada .
  por herançaNão só pode reutilizar o código,Bem o suficienteEndireitar o relacionamento entre classes por meio de herança. Em Python, na instrução de definição de classe, use um par de parênteses no lado direito do nome da classe para incluir o nome da classe base a ser herdada, de modo a obter a herança de classe. O formato de sintaxe específico é o seguinte:

class ClassName(baseclasslist): 
	'''类的帮助信息'''  # 类文档字符串
	statement  # 类体

Descrição do parâmetro :

  • ClassName : usado para especificar o nome da classe.
  • baseclasslist : usado para especificarclasse base para herdar, pode haver mais de uma, e os nomes das classes são separados por vírgulas ",". Se não for especificado, o objeto de classe base de todos os objetos Python será usado .
  • '''Informações de ajuda da classe''' : usado para especificar a string do documento da classe. Após definir a string, ao criar o objeto da classe, após inserir o nome da classe e o colchete esquerdo "(", as informações será exibido.
  • instrução : corpo da classe, composto principalmente de instruções de definição, como variáveis ​​de classe (ou membros de classe), métodos e atributos. Se você não pensar na função específica da classe ao defini-la, também poderá usar a instrução pass diretamente no corpo da classe.

  Por exemplo, defina uma classe Fruit Fruit (como a classe base) e defina um atributo de classe (usado para salvar a cor padrão da fruta) e um método harvest() nesta classe e, em seguida, crie uma classe Banana e uma Grape class, ambas herdadas da classe Fruit, e finalmente criar instâncias da classe Banana e da classe Grape, e chamar o método harvest() (escrito na classe base), o código é o seguinte:

class Fruit:  # 定义水果类(基类)
    color = '绿色'  # 定义类属性
    def harvest(self, color):
        print('水果是{}的'.format(color))  # 输出的是形式参数color
        print('水果已经收获......')
        print('水果原来是{}的'.format(Fruit.color))  # 输出的是类属性color
class Banana(Fruit):  # 定义香蕉类(派生类)
    color = '黄色'
    def __init__(self):
        print('我是香蕉')
class Grape(Fruit):  # 定义葡萄类(派生类)
    color = '紫色'
    def __init__(self):
        print('我是葡萄')
banana = Banana()  # 创建类的实例(香蕉)
banana.harvest(banana.color)  # 调用基类的harvest()方法
grape = Grape()  # 创建类的实例(葡萄)
grape.harvest(grape.color)  # 调用基类的harvest()方法

  A execução do código acima exibirá o resultado conforme a figura abaixo:

insira a descrição da imagem aqui

  Pode ser visto nos resultados da execução que, embora não haja nenhum método harvest() na classe Banana e na classe Grape, o PythonPermitir que classes derivadas acessem métodos de classe base


2. Reescrita do método

  Os membros da classe base serão herdados pela classe derivada, quando um método na classe basenão totalmente aplicávelAo usar uma classe derivada, você precisa substituir esse método da classe pai na classe derivada .
  No código de exemplo acima, o método harvest() definido na classe base exibirá "fruta..." independente de qual seja a classe derivada, em vez de exibir o nome da fruta, conforme a figura a seguir:

insira a descrição da imagem aqui

Se você quiser dar dicas diferentes para diferentes frutas, você pode sobrescrever o método harvest()   na classe derivada . código mostra como abaixo:

class Fruit:  # 定义水果类(基类)
    color = '绿色'  # 定义类属性
    def harvest(self, color):
        print('水果是{}的'.format(color))  # 输出的是形式参数color
        print('水果已经收获......')
        print('水果原来是{}的'.format(Fruit.color))  # 输出的是类属性color
class Banana(Fruit):  # 定义香蕉类(派生类)
    color = '黄色'
    def __init__(self):
        print('我是香蕉')
    def harvest(self, color):
        print('香蕉是{}的'.format(color))  # 输出的是形式参数color
        print('香蕉已经收获......')
        print('香蕉原来是{}的'.format(Fruit.color))  # 输出的是类属性color
banana = Banana()  # 创建类的实例(香蕉)
banana.harvest(banana.color)  # 调用基类的harvest()方法

  Depois de executar o código acima, o resultado é exibido da seguinte forma:

我是香蕉
香蕉是黄色的
香蕉已经收获......
香蕉原来是绿色的

3. Chame o método _ _init _ _() da classe base na classe derivada

  Ao definir o método _ _ init _ _() em uma classe derivada,não invocado automaticamenteO método _ _ init _ _() da classe base. Por exemplo, defina uma classe Fruit, crie a cor do atributo de classe no método _ _ init _ _() e, em seguida, defina um método harvest() na classe Fruit, imprima o valor da cor do atributo de classe neste método e, em seguida, crie a classe Class Banana, finalmente crie uma instância da classe Banana e chame o método harvest(), o código é o seguinte:

class Fruit:  # 定义水果类(基类)
    def __init__(self, color = '绿色'):
        Fruit.color = color  # 定义类属性
    def harvest(self):
        print('水果原来是{}的'.format(Fruit.color))  # 输出的是类属性color
class Banana(Fruit):  # 定义香蕉类(派生类)
    def __init__(self):
        print('我是香蕉')
banana = Banana()  # 创建类的实例(香蕉)
banana.harvest()  # 调用基类的harvest()方法

  Depois que o código acima for executado, as informações de exceção mostradas na figura abaixo serão exibidas.

insira a descrição da imagem aqui

  Portanto, para que a classe derivada chame o método _ _ init _ _() da classe base para realizar a inicialização necessária, é necessário utilizar a função super() da classe derivada para chamar o método _ _ init _ _ () da classe base. O formato de uso é o seguinte:

super()._ _init_ _([参数1, ....])

注意:如果基类的初始化方法中有参数传入,则这里需要在 _ _init_ _() 括号中写入形式参数

  Depois de adicionar super()._ _ init _ _() ao código acima, o código e os resultados da execução são mostrados na figura abaixo:

insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/2201_75641637/article/details/129552892
Recomendado
Clasificación