Python -> (8) notas de estudo

classe classe

Em Python, todos os tipos de dados são tratados como objetos, é claro, também podem ser objetos personalizados. Costume tipo de objecto de dados é orientada para o objecto de classe conceito (Classe) .

Definir uma classe simples

Classe sintaxe de definição:

class nameoftheclass(parent_class):
    statement1
    statement2
    statement3

Na declaração da classe você pode escrever quaisquer declarações Python, incluindo a definição da função (chamado no método de classe):

>>> class MyClass(object):
...     """A simple example class"""
...     i = 12345
...     def f(self):
...         return 'hello world'

__init__ método

Instanciar a classe para usar os símbolos de função. Contanto que o objecto de classe é um não-paramétricos função retorna uma nova instância da classe pode.

x = MyClass()

Mais do que criar uma nova instância da classe e atribui o objeto para a variável local x. A operação instanciação cria um objecto vazio .

Muitas classes preferem criar objetos para um estado inicial . Portanto, uma classe pode definir um chamado __init__()método especial:

def __init__(self):
    self.data = []

Classe define um __init__()método, em seguida, o operador de classe instanciação vai chamar a nova instância da classe é criada automaticamente __init__()método. Assim, neste exemplo, você pode criar uma nova instância:

x = MyClass()

__init__()O método pode ter argumentos. Na verdade, os parâmetros __init__()passados para o operador de classe instanciação. Por exemplo:

>>> class Complex:
...     def __init__(self, realpart, imagpart):
...         self.r = realpart
...         self.i = imagpart
...
>>> x = Complex(3.0, -4.5)
>>> x.r, x.i
(3.0, -4.5)

Python Inheritance

Quando uma classe herda de outra classe, o herda todos os recursos (por exemplo, variáveis ​​e métodos) da classe pai. Isso ajuda a reutilização de código.

Primeiro, crie um chamado Personclasse, e em seguida, criar duas classes derivadas Studente Teacher. Quando as duas classes de Persontempo para herdar a classe, além de suas aulas que Persontodos os métodos da classe terá seus próprios novos métodos e finalidade da variável.

#!/usr/bin/env python3

class Person(object):
    """
    返回具有给定名称的 Person 对象
    """

    def __init__(self, name):
        self.name = name

    def get_details(self):
        """
        返回包含人名的字符串
        """
        return self.name


class Student(Person):
    """
    返回 Student 对象,采用 name, branch, year 3 个参数
    """

    def __init__(self, name, branch, year):
        Person.__init__(self, name)
        self.branch = branch
        self.year = year

    def get_details(self):
        """
        返回包含学生具体信息的字符串
        """
        return "{} studies {} and is in {} year.".format(self.name, self.branch, self.year)


class Teacher(Person):
    """
    返回 Teacher 对象,采用字符串列表作为参数
    """
    def __init__(self, name, papers):
        Person.__init__(self, name)
        self.papers = papers

    def get_details(self):
        return "{} teaches {}".format(self.name, ','.join(self.papers))


person1 = Person('Sachin')
student1 = Student('Kushal', 'CSE', 2005)
teacher1 = Teacher('Prashad', ['C', 'C++'])

print(person1.get_details())
print(student1.get_details())
print(teacher1.get_details())

Herança múltipla

Uma classe pode herdar de mais de uma classe, com todas as variáveis ​​e métodos da classe pai, a seguinte sintaxe:

class MyClass(Parentclass1, Parentclass2,...):
    def __init__(self):
        Parentclass1.__init__(self)
        Parentclass2.__init__(self)
        ...
        ...

Excluindo objetos

Use palavras-chave delpara objetos de exclusão:

>>> s = "I love you"
>>> del s
>>> s
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 's' is not defined

Propriedades método de leitura

Não use a propriedade em Python (atributos) lendo métodos (getters e setters). As propriedades podem ser usados ​​diretamente:

>>> class Student(object):
...     def __init__(self, name):
...         self.name = name
...
>>> std = Student("Kushal Das")
>>> print(std.name)
Kushal Das
>>> std.name = "Python"
>>> print(std.name)
Python

decorador @property

Para ser um ajuste mais preciso dos atributos de controle de acesso, você pode usar @propertydecorador, @propertydecorador é responsável pela propriedade para se tornar uma chamada de método

#!/usr/bin/env python3

class Account(object):
    """账号类,
    amount 是美元金额.
    """
    def __init__(self, rate):
        self.__amt = 0
        self.rate = rate

    @property
    def amount(self):
        """账号余额(美元)"""
        return self.__amt

    @property
    def cny(self):
        """账号余额(人民币)"""
        return self.__amt * self.rate

    @amount.setter
    def amount(self, value):
        if value < 0:
            print("Sorry, no negative amount in the account.")
            return
        self.__amt = value

if __name__ == '__main__':
    acc = Account(rate=6.6) # 基于课程编写时的汇率
    acc.amount = 20
    print("Dollar amount:", acc.amount)
    print("In CNY:", acc.cny)
    acc.amount = -100
    print("Dollar amount:", acc.amount)
Publicado 33 artigos originais · ganhou elogios 1 · vista 1243

Acho que você gosta

Origin blog.csdn.net/weixin_44783002/article/details/104583010
Recomendado
Clasificación