Python3 объектно-ориентированного
Python был разработан с самого начала является объектно-ориентированный язык, и как таковой, создать класс и объекты в Python очень легко. В этом разделе мы будем подробно объектно-ориентированное программирование на языке Python.
Если вы не были подвержены объектно-ориентированный язык программирования, то вам, возможно, придется сначала понять некоторые из основных особенностей объектно-ориентированных языков, сформированных в сознании внутри базовой концепции объектно-ориентированного, который поможет вам легко узнать Python объектно-ориентированное программирование.
Далее, давайте рассмотрим простой понимание объектно-ориентированных под некоторыми основными функциями.
Объектно-ориентированной технологии Обзор
- Класс (класс): используется для описания коллекции имеют те же свойства и методы объектов. Он определяет набор свойств и методов, общих для каждого объекта. Объекты являются экземплярами классов.
- Класс: переменные переменные класса является общим по всему инстанцирован объекта. Переменные класса определены и вне функции в классе в. Переменные класса обычно не используются в качестве переменных экземпляра.
- Члены данных: переменные класса или переменные экземпляра для соответствующих классов обработки данных и объектов экземпляра.
- Переопределения: Если вы не можете удовлетворить потребности подкласса наследует от метода родительского класса, он может быть переписан, этот процесс называется метод наложения (переопределение), также известный как метод наиважнейшей.
- Примеры переменных: переменные , определенные в методе, только роль класса текущего экземпляра.
- Наследование: То есть производный класс (производный класс) наследует (базовый класс) поля и методы базового класса. Наследование также позволяет производный объект класса в качестве объекта лечения базового класса. Например, есть такая конструкция: тип объекта, который является производным от класса собак животных, который является аналогом "представляет собой (это-а)" отношения (рис пример, собака для животных).
- Инстанцировать: создать экземпляр класса, конкретного класса объектов.
- Методы: Функции класса определены.
- Объект: структура данных экземпляра с помощью определения класса. Объекты данных включают в себя два члена (класс и переменные экземпляра) и методы.
И другие языки программирования, Python как минимум нового синтаксиса и семантики ситуации присоединиться к механизму класса.
классы Python в объектно-ориентированного программирования предоставляет все основные функции: механизм наследования классов позволяет использовать несколько базовых классов, базовый класс в производных классах можно переопределить любые методы, вы можете вызвать метод базового класса с тем же именем.
Объекты могут содержать любое количество и тип данных.
определение класса
Синтаксис выглядит следующим образом:
class ClassName: <statement-1> . . . <statement-N>
После того, как экземпляры класса создаются, вы можете использовать его свойства, на самом деле, после того как вы создаете класс, вы можете получить доступ к его свойствам с помощью имени класса.
объект класса
Объекты класса поддерживают два вида операций: ссылки на атрибуты и Инстанцирование.
Атрибут ссылки использовать Python для всех атрибутов ссылается на стандартныйсинтаксис: obj.name.
После того, как объект класса был создан атрибут класса имен все имена являются допустимыми именами. Таким образом, если определение класса выглядит следующим образом:
#!/usr/bin/python3 class MyClass: """一个简单的类实例""" i = 12345 def f(self): return 'hello world' # 实例化类 x = MyClass() # 访问类的属性和方法 print("MyClass 类的属性 i 为:", x.i) print("MyClass 类的方法 f 输出为:", x.f())
Инстанцировать класс:
# 实例化类 x = MyClass() # 访问类的属性和方法
Над создает новый экземпляр класса и присваивает этот объект локальной переменной х, пустой объект.
Выше вывода программы:
MyClass 类的属性 i 为: 12345 MyClass 类的方法 f 输出为: hello world
Многие классы, как создавать объекты в известном начальном состоянии. Поэтому класс может определить названный __init __ () специальный метод (конструктор), как это:
def __init__(self): self.data = []
Класс определяет __init __ () метод, то оператор экземпляра класса будет автоматически вызывать __init __ () метод. Таким образом, в данном примере, может быть, чтобы создать новый экземпляр:
x = MyClass()
Конечно, метод __init __ () может иметь аргументы, параметры __init __ () передается оператору создания экземпляра класса. Например:
>>> 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)
методы класса
В земном интерьере, используйте Защиту ключевое слово может быть определена как метод класса, различные определения и общие функции, методы класса должны включать в себя параметр, и в качестве первого параметра:
#!/usr/bin/python3 #类定义 class people: #定义基本属性 name = '' age = 0 #定义私有属性,私有属性在类外部无法直接进行访问 __weight = 0 #定义构造方法 def __init__(self,n,a,w): self.name = n self.age = a self.__weight = w def speak(self): print("%s 说: 我 %d 岁。" %(self.name,self.age)) # 实例化类 p = people('w3big',10,30) p.speak()
Выше вывода программы:
w3big 说: 我 10 岁。
унаследовать
Python также поддерживает наследование классов, если язык не поддерживает наследование, класс имеет мало смысла. Определение производного класса следующим образом:
class DerivedClassName(BaseClassName1): <statement-1> . . . <statement-N>
Обратите внимание, что порядок базового класса в скобках, если базовый класс имеет то же имя метода, но без указания подклассы, Python слева направо метод поиска, который не найден в подклассе, слева направо, чтобы найти базовый класс содержит методы.
BaseClassName (пример имени базового класса) должны быть определены в производном классе области. В дополнение к классам, вы можете использовать выражение, базовый класс определен в другом модуле, который очень полезен для:
class DerivedClassName(modname.BaseClassName):
примеров
#!/usr/bin/python3 #类定义 class people: #定义基本属性 name = '' age = 0 #定义私有属性,私有属性在类外部无法直接进行访问 __weight = 0 #定义构造方法 def __init__(self,n,a,w): self.name = n self.age = a self.__weight = w def speak(self): print("%s 说: 我 %d 岁。" %(self.name,self.age)) #单继承示例 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 说: 我 %d 岁了,我在读 %d 年级"%(self.name,self.age,self.grade)) s = student('ken',10,60,3) s.speak()
Выше вывода программы:
ken 说: 我 10 岁了,我在读 3 年级
Множественное наследование
Python поддерживает ограниченную форму множественного наследования. определение множественный наследование классов выглядит следующим образом:
class DerivedClassName(Base1, Base2, Base3): <statement-1> . . . <statement-N>
Обратите внимание, что порядок в скобках родительского класса, если родительский класс имеет такое же имя метода, но без указания подклассы, Python слева направо метод поиска, который не найден в подклассе, слева направо, чтобы найти родительский класс содержит методы.
#!/usr/bin/python3 #类定义 class people: #定义基本属性 name = '' age = 0 #定义私有属性,私有属性在类外部无法直接进行访问 __weight = 0 #定义构造方法 def __init__(self,n,a,w): self.name = n self.age = a self.__weight = w def speak(self): print("%s 说: 我 %d 岁。" %(self.name,self.age)) #单继承示例 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 说: 我 %d 岁了,我在读 %d 年级"%(self.name,self.age,self.grade)) #另一个类,多重继承之前的准备 class speaker(): topic = '' name = '' def __init__(self,n,t): self.name = n self.topic = t def speak(self): print("我叫 %s,我是一个演说家,我演讲的主题是 %s"%(self.name,self.topic)) #多重继承 class sample(speaker,student): a ='' def __init__(self,n,a,w,g,t): student.__init__(self,n,a,w,g) speaker.__init__(self,n,t) test = sample("Tim",25,80,4,"Python") test.speak() #方法名同,默认调用的是在括号中排前地父类的方法
Выше вывода программы:
我叫 Tim,我是一个演说家,我演讲的主题是 Python
метод переопределяет
Если функция вы метод родительского класса не может удовлетворить ваши потребности, вы можете переписать ваш метод родительского класса в подклассе, примеры заключаются в следующем:
#!/usr/bin/python3 class Parent: # 定义父类 def myMethod(self): print ('调用父类方法') class Child(Parent): # 定义子类 def myMethod(self): print ('调用子类方法') c = Child() # 子类实例 c.myMethod() # 子类调用重写方法
Выше вывода программы:
调用子类方法
Атрибуты класса и методы
Частный класс недвижимости
__private_attrs: начиная с двух символов подчеркивания , заявляющие , что собственность является частной и не могут быть использованы или доступны непосредственно в классе извне. Самостоятельно .__ private_attrs при использовании в качестве метода класса.
методы класса
В земном интерьере, используйте Защиту ключевое слово может быть определен как метод класса с общим определением различных функций, методы класса должны включать в себя параметр, и в качестве первого параметра
Частные методы класса
__private_method: первые два подчеркивание, метод объявлен как частные методы в классе не может вызывать извне. Внутренний класс slef вызов .__ private_methods.
примеров
Частная собственность экземпляра класса следующим образом:
#!/usr/bin/python3 class JustCounter: __secretCount = 0 # 私有变量 publicCount = 0 # 公开变量 def count(self): self.__secretCount += 1 self.publicCount += 1 print (self.__secretCount) counter = JustCounter() counter.count() counter.count() print (counter.publicCount) print (counter.__secretCount) # 报错,实例不能访问私有变量
Выше вывода программы:
1 2 2 Traceback (most recent call last): File "test.py", line 16, in <module> print (counter.__secretCount) # 报错,实例不能访问私有变量 AttributeError: 'JustCounter' object has no attribute '__secretCount'
Закрытый метод экземпляра класса следующим образом:
#!/usr/bin/python3 class Site: def __init__(self, name, url): self.name = name # public self.__url = url # private def who(self): print('name : ', self.name) print('url : ', self.__url) def __foo(self): # 私有方法 print('这是私有方法') def foo(self): # 公共方法 print('这是公共方法') self.__foo() x = Site('本教程', 'www.w3big.com') x.who() # 正常输出 x.foo() # 正常输出 x.__foo() # 报错
Результаты приведенных выше примеров:
Собственные методы класса:
- __init__: Конструктор вызывается , когда создается объект
- __del__: деструкторов, объекты релиз
- __repr__: печать, преобразование
- __setitem__: в соответствии с поручением индекса
- __getitem__: Получает значение индекса
- __len__: получить длину
- __cmp__: операция сравнения
- __call__: вызов функции
- __add__: добавить операцию
- __sub__: Вычитание
- __mul__: умножение
- __div__: операция деления
- __mod__: оператор осталось
- __pow__: вызываемая сторона
Оператор Перегрузки
Python также поддерживает перегрузку операторов, что я могу быть перегружен запатентованные методы класса, примеры заключаются в следующем:
#!/usr/bin/python3 class Vector: def __init__(self, a, b): self.a = a self.b = b def __str__(self): return 'Vector (%d, %d)' % (self.a, self.b) def __add__(self,other): return Vector(self.a + other.a, self.b + other.b) v1 = Vector(2,10) v2 = Vector(5,-2) print (v1 + v2)
Результаты выполнения приведенного выше кода заключаются в следующем:
Vector(7,8)