Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 23, 2015 14:15:16

@Aleks@
Зарегистрирован: 2015-10-23
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

(Self)

Начал изучать ООП, понял что self нужно писать со всеми методами обязательно,
но вот немного запутался, что попадает в 1й self а что во 2ой ??

Офлайн

#2 Окт. 23, 2015 14:46:11

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

(Self)

Второй - это первый.

Принцип такой же:

def f(arg):
    print(arg.color)



Отредактировано py.user.next (Окт. 23, 2015 14:46:23)

Офлайн

#3 Окт. 23, 2015 15:53:51

@Aleks@
Зарегистрирован: 2015-10-23
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

(Self)

непонятно почему именно self.color, а не просто color + ‘!’
поясните о чем нам говорить self.color

Офлайн

#4 Окт. 23, 2015 15:57:09

old_monty
Зарегистрирован: 2015-09-27
Сообщения: 238
Репутация: +  20  -
Профиль   Отправить e-mail  

(Self)

Когда вы пишете

class A:
   color = 'red'
   ...
то это значит, что красный цвет будет у любого вновь созданного экземпляра класса А:
>>>a = A()
>>>b = A()
>>> a.color
'red'
>>> b.color
'red'
В таком виде color является общим (совместно используемым) свойством класса А. Для доступа к такому свойству на чтение или на запись даже не обязательно создавать экземпляр этого класса:
>>> A.color
'red'
Это приводит к одновременному (не всегда желательному) изменению всех экземпляров данного класса:
>>> a = A()
>>> b = A()
>>> a.color
'red'
>>> b.color
'red'
>>> A.color = 'green'
>>> a.color
'green'
>>> b.color
'green'
>>> 

Отредактировано old_monty (Окт. 23, 2015 15:58:01)

Офлайн

#5 Окт. 23, 2015 15:58:05

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

(Self)

http://wombat.org.ua/AByteOfPython/object_oriented_programming.html



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#6 Окт. 23, 2015 16:02:16

@Aleks@
Зарегистрирован: 2015-10-23
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

(Self)

ZerG
http://wombat.org.ua/AByteOfPython/object_oriented_programming.html

Эта переменная указывает на сам объект экземпляра класса
т.е. self указывает на:?

a =A()

Офлайн

#7 Окт. 23, 2015 16:17:19

old_monty
Зарегистрирован: 2015-09-27
Сообщения: 238
Репутация: +  20  -
Профиль   Отправить e-mail  

(Self)

Другое дело, если определить класс А так, чтобы каждый экземпляр класса А получал свой собственный цвет в момент своего создания. Тогда цвет становится индивидуальным для каждого объекта:

>>> class A:
	def __init__(self, color):
		self.color = color
		
>>> a = A('red')
>>> b = A('green')
>>> a.color
'red'
>>> b.color
'green'

Офлайн

#8 Окт. 23, 2015 16:18:26

@Aleks@
Зарегистрирован: 2015-10-23
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

(Self)

Так вроде тоже работает

class A:
	color = 'red'
	
	def metod(self):
		print(A().color + '!') #self заменил на A()
		
a = A() 
a.metod()
input()
Ну и простой вывод: self = A() = a
—————————————-
Вопрос: верно?

Отредактировано @Aleks@ (Окт. 23, 2015 16:22:02)

Офлайн

#9 Окт. 23, 2015 16:37:29

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

(Self)

Атрибут класса является глобальным для всех экземпляров (объектов) построенных на его основании.

Проще:

class A():
    a = 1  # атрибут класса
    def __init__(self, b):
        self.b = b # атрибут экземпляра класса
a_I = A(2)
print(a_I.a)
print(a_I.b)
a_II = A(3)
print(a_II.a)
print(a_II.b)

P.S. Ссори за исправления. Набираю с планшета…

Отредактировано 4kpt_III (Окт. 23, 2015 16:48:04)

Офлайн

#10 Окт. 23, 2015 17:06:20

@Aleks@
Зарегистрирован: 2015-10-23
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

(Self)

4kpt_III
Атрибут класса является глобальным для всех экземпляров (объектов) построенных на его основании.Проще:
Это понятно.
Но на мой вопрос так и не дали простого ответа да/нет

Вот у вас:
self.b = b # атрибут экземпляра класса
self.b - тут под self подразумевается A() или объект класса A
да или нет?
меня просто смущает слово self, и я хочу в конце концов разобраться

Отредактировано @Aleks@ (Окт. 23, 2015 17:08:30)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version