Нужна помощь с концепцией класса и экземпляра в Python - PullRequest
2 голосов
/ 23 мая 2009

Я уже прочитал несколько документов, но определения "class" и "instance" мне пока не совсем понятно.

Похоже, этот "класс" подобен комбинации функций или методов, которые возвращают какой-то результат, это правильно? А как насчет экземпляра? Я читал, что вы работаете с классом, который вы создали с помощью экземпляра, но не проще ли работать напрямую с классом?

Иногда получить представление о языке сложнее, чем работать с ним.

Ответы [ 5 ]

7 голосов
/ 23 мая 2009

Ваш вопрос действительно довольно широкий, так как классы и экземпляры / объекты являются жизненно важными частями объектно-ориентированного программирования, так что это не совсем специфично для Python. Я рекомендую вам купить несколько книг по этому вопросу, поскольку, хотя изначально они и являются базовыми, они могут быть довольно глубокими. По сути , однако:

Наиболее популярной и развитой моделью ООП является модель на основе классов, а не модель на основе объектов. В этой модели объекты - это объекты, которые объединяют состояние (то есть данные), поведение (то есть процедуры или методы) и идентичность (уникальное существование среди всех других объектов). Структура и поведение объекта определяются классом, который является определением или планом всех объектов определенного типа. Объект должен быть явно создан на основе класса, и созданный таким образом объект считается экземпляром этого класса. Объект похож на структуру с добавлением указателей на методы, контроля доступа к элементу и неявного члена данных, который находит экземпляры класса (то есть фактические объекты этого класса) в иерархии классов (важно для функций наследования во время выполнения).

Таким образом, вы, например, определите класс Dog и создадите экземпляры конкретных собак:

>>> class Dog():
...     def __init__(self, name, breed):
...             self.name = name
...             self.breed = breed
...     def talk(self):
...             print "Hi, my name is " + self.name + ", I am a " + self.breed
...
>>> skip = Dog('Skip','Bulldog')
>>> spot = Dog('Spot','Dalmatian')
>>> spot.talk()
Hi, my name is Spot, I am a Dalmatian
>>> skip.talk()
Hi, my name is Skip, I am a Bulldog

Хотя этот пример глуп, вы можете начать видеть, как вы можете определить класс Client, который задает план того, чем является Клиент, имеет методы для выполнения действий над конкретным клиентом, а затем манипулирует конкретным экземпляр клиента путем создания объекта и вызова этих методов в этом контексте.

Иногда, однако, у вас есть методы класса, которые на самом деле не имеют смысла для доступа через экземпляр класса, а больше из самого класса. Они известны как статические методы .

3 голосов
/ 23 мая 2009

Я не уверен, какой у вас уровень знаний, поэтому я прошу прощения, если этот ответ слишком упрощен (тогда просто игнорируйте его).

Класс - это шаблон для объекта. Как план для автомобиля. Экземпляр класса похож на настоящий автомобиль. Таким образом, у вас есть один план, но вы можете иметь несколько разных экземпляров автомобилей. План и автомобиль - разные вещи.

Итак, вы создаете класс, который описывает, что может делать экземпляр этого класса и какие свойства он должен иметь. Затем вы «строите» экземпляр и получаете объект, с которым вы можете работать.

2 голосов
/ 23 мая 2009

Это довольно просто на самом деле. Вы знаете, как в python говорят, что «все является объектом». Говоря упрощенно, вы можете думать о любом объекте как об «экземпляре» и о инструкциях по созданию объекта как класса. Или, с точки зрения биологии, ДНК - это класс, а вы - образец ДНК.

class HumanDNA(): # class
   ... class attributes ...

you = HumanDNA() # instance
1 голос
/ 23 мая 2009

См. http://homepage.mac.com/s_lott/books/python/htmlchunks/ch21.html

Объектно-ориентированное программирование позволяет нам организовать наши программы вокруг взаимодействия объектов. Класс дает определение структура и поведение объектов; каждый объект является экземпляром класса.

Объекты («экземпляры») - это вещи, которые взаимодействуют, выполняют работу, сохраняются в файловой системе и т. Д.

Классы - это определения поведения объекта.

Кроме того, класс создает новые объекты, которые являются членами этого класса (имеют общую структуру и поведение)

0 голосов
/ 23 мая 2009

Частично это сбивает с толку из-за динамически типизированной природы Python, которая позволяет вам работать с классом и экземпляром практически одинаково. В других языках разница более конкретна в том, что класс предоставляет шаблон для создания объекта (экземпляра), и им нельзя управлять так же непосредственно, как в Python. Преимущество работы с экземпляром, а не с классом, состоит в том, что класс может предоставить прототип, на котором создаются экземпляры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...