Найти - Пользователи
Полная версия: (Self)
Начало » Python для новичков » (Self)
1 2
@Aleks@
Начал изучать ООП, понял что self нужно писать со всеми методами обязательно,
но вот немного запутался, что попадает в 1й self а что во 2ой ??

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

Принцип такой же:
def f(arg):
    print(arg.color)
@Aleks@
непонятно почему именно self.color, а не просто color + ‘!’
поясните о чем нам говорить self.color
old_monty
Когда вы пишете
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'
>>> 
@Aleks@
ZerG
http://wombat.org.ua/AByteOfPython/object_oriented_programming.html

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

a =A()
old_monty
Другое дело, если определить класс А так, чтобы каждый экземпляр класса А получал свой собственный цвет в момент своего создания. Тогда цвет становится индивидуальным для каждого объекта:
>>> class A:
	def __init__(self, color):
		self.color = color
		
>>> a = A('red')
>>> b = A('green')
>>> a.color
'red'
>>> b.color
'green'
@Aleks@
Так вроде тоже работает

class A:
	color = 'red'
	
	def metod(self):
		print(A().color + '!') #self заменил на A()
		
a = A() 
a.metod()
input()
Ну и простой вывод: self = A() = a
—————————————-
Вопрос: верно?
4kpt_III
Атрибут класса является глобальным для всех экземпляров (объектов) построенных на его основании.

Проще:

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. Ссори за исправления. Набираю с планшета…
@Aleks@
4kpt_III
Атрибут класса является глобальным для всех экземпляров (объектов) построенных на его основании.Проще:
Это понятно.
Но на мой вопрос так и не дали простого ответа да/нет

Вот у вас:
self.b = b # атрибут экземпляра класса
self.b - тут под self подразумевается A() или объект класса A
да или нет?
меня просто смущает слово self, и я хочу в конце концов разобраться
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB