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 Person
classe, e em seguida, criar duas classes derivadas Student
e Teacher
. Quando as duas classes de Person
tempo para herdar a classe, além de suas aulas que Person
todos 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 del
para 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 @property
decorador, @property
decorador é 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)