- Programming for beginners
- Python-сообщество
- #1 Март 8, 2017 22:37:08
- Зачем писать self.name = name, а после использовать self.name вместо name?
- #2 Март 8, 2017 23:38:36
- Зачем писать self.name = name, а после использовать self.name вместо name?
- #3 Март 9, 2017 13:57:09
- Зачем писать self.name = name, а после использовать self.name вместо name?
- #4 Март 9, 2017 14:01:21
- Зачем писать self.name = name, а после использовать self.name вместо name?
- #5 Март 9, 2017 15:54:49
- Зачем писать self.name = name, а после использовать self.name вместо name?
- #6 Март 9, 2017 16:23:08
- Зачем писать self.name = name, а после использовать self.name вместо name?
- #7 Март 9, 2017 16:51:50
- Зачем писать self.name = name, а после использовать self.name вместо name?
- #8 Март 9, 2017 17:09:01
- Зачем писать self.name = name, а после использовать self.name вместо name?
- #9 Март 9, 2017 17:50:02
- Зачем писать self.name = name, а после использовать self.name вместо name?
- #10 Март 9, 2017 21:48:58
- Зачем писать self.name = name, а после использовать self.name вместо name?
- Что такое self в Python?
- Войдите, чтобы написать ответ
- Как запустить код телеграм бота на python в pythonanywhere?
Programming for beginners
Every module in python has predefined attribute ‘__name__’. If the module is being run standalone by the user, then the module name is ‘__main__’, else it gives you full module name.
def sum(a,b): return a+b print("Module name : ",__name__)
import arithmetic print("Module name : ",arithmetic.__name__)
Observe the output, module name printed twice. A module can contain executable statements. These statements are executed; only the first time the module name is encountered in an import statement. So executable statement in arithmetic.py is also executed.
def sum(a,b): return a+b if(__name__=="__main__"): print("This program is run by itslef") else: print("This module called by other module")
Python-сообщество
- Начало
- » Python для новичков
- » Зачем писать self.name = name, а после использовать self.name вместо name?
#1 Март 8, 2017 22:37:08
Зачем писать self.name = name, а после использовать self.name вместо name?
У некоторых людей в коде замечаю такие строки
self.name = name
self.name = 2
Зачем писать вообще self.name = name если name даже не используется?
И ещё: когда мы пишем self.name = name, а после пишем self.name = 2, то почему у нас не пропадает этот name?
Лучший учитель — это ты сам.
#2 Март 8, 2017 23:38:36
Зачем писать self.name = name, а после использовать self.name вместо name?
Приводите код. Без кода никто и ничем помочь не сможет. Но вообще. Объявление self.что_то дает возможность в объекте (экземпляре класса) его использовать. Также можно назначить или изменить этот атрибут извне. Еще прочитать значение.
#3 Март 9, 2017 13:57:09
Rodegast От: Пятигорск Зарегистрирован: 2007-12-28 Сообщения: 2611 Репутация: 179 Профиль Отправить e-mail
Зачем писать self.name = name, а после использовать self.name вместо name?
У некоторых людей в коде замечаю такие строки self.name = name self.name = 2
С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.
#4 Март 9, 2017 14:01:21
Зачем писать self.name = name, а после использовать self.name вместо name?
def __init__(self, name) self.name = name
#5 Март 9, 2017 15:54:49
Зачем писать self.name = name, а после использовать self.name вместо name?
class car: def nname(self,name): self.name = name self.name = input('Введите ваше имя') #Зачем использовать self.name, когда мы написали self.name = name и можно #написать здесь print(name) print(self.name) sandra =car() sandra.nname('gloria')
Какой здесь смыслл введения name если оно почти не используется, и как правильнее использовать: name или self.name в print() и в остальных случая?
Код писал на планшете поэтому без критики пожалуйста
Лучший учитель — это ты сам.
Отредактировано Djo0513 (Март 9, 2017 16:18:11)
#6 Март 9, 2017 16:23:08
Rodegast От: Пятигорск Зарегистрирован: 2007-12-28 Сообщения: 2611 Репутация: 179 Профиль Отправить e-mail
Зачем писать self.name = name, а после использовать self.name вместо name?
> Какой здесь смыслл введения name если оно почти не используется
Строка self.name = name в данном примере смысла не имеет, но она могла остаться из прошлого. Это и называется “не отрефакторили”.
С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.
Отредактировано Rodegast (Март 9, 2017 16:23:57)
#7 Март 9, 2017 16:51:50
JOHN_16 От: Россия, Петропавловск-Камчатск Зарегистрирован: 2010-03-22 Сообщения: 3292 Репутация: 221 Профиль Отправить e-mail
Зачем писать self.name = name, а после использовать self.name вместо name?
Очень похоже на говнокод. Думаю не стоит объяснять что на него не стоит равняться и что там что угодно может быть.
Ну и конкретно этот код не стоит того что бы его разбирать и чему то учиться. Разве что как НЕ надо делать.
_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com
#8 Март 9, 2017 17:09:01
Зачем писать self.name = name, а после использовать self.name вместо name?
JOHN_16
Тогда в чём смысл написания self.что-то = что-то? С примерами если не трудно
Лучший учитель — это ты сам.
#9 Март 9, 2017 17:50:02
JOHN_16 От: Россия, Петропавловск-Камчатск Зарегистрирован: 2010-03-22 Сообщения: 3292 Репутация: 221 Профиль Отправить e-mail
Зачем писать self.name = name, а после использовать self.name вместо name?
Djo0513
вы не понимаете основ ООП я так полагаю.
Вот вам пример:
>>> class Foo: . def set_name(self, name): . self.name = name . >>> name = 'John' >>> foo = Foo() >>> foo.set_name(name) >>> >>> print(name) John >>> print(foo.name) John >>> >>> name = 'Alice' >>> >>> print(name) Alice >>> print(foo.name) John >>>
строчка self.name = name, означает что значение переданное в качестве аргумента метода класса, присваивается атрибуту экземпляра класса. Есть переменная name и есть атрибут name с одинаковым значением John. Затем меняем значение переменной, но при этом значение атрибута не изменится, потому что они никак не связаны.
Тут не мне объяснять надо, а Вам брать книгу и читать. ООП это объемная тема. А это основы. Основы нужно не на форумах спрашивать, а изучать самостоятельно.
_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com
#10 Март 9, 2017 21:48:58
Зачем писать self.name = name, а после использовать self.name вместо name?
JOHN_16
Я не такой тупой каким вы меня считаете, я знаю что self этт указатель на объект класса, и смысл ооп я понимаю, ваш код я тоже понял: если бы там была такая строчка foo.set_name(name) после name = ‘Alice’, то результат был бы Alice Alice а не Alice John. Тема не из лёгких, спасибо за примеры, до меня допёрло что name нужно так как это class а в классе нужно чтобы name был нужен не одному экземпляру класса а нескольким.
Лучший учитель — это ты сам.
Что такое self в Python?
Совсем непонятно, что такое self. Понятно, что его по умолчанию нужно писать как первый параметр описании каждого метода. То есть определение уже наизусть выучил, но трудно понять что оно значит. Вроде никаких затруднений пока что ни с чем больше нет, только с этим. Уже давно ищу, что это такое.
Легко нагуглил.
stackoverflow.com/a/21366809/3307167 — по мне так самый понятный вариант.
stackoverflow.com/a/31096552/3307167 — а тут картиночки даже есть, для лучшего понимания.
class A: def test(self, a): self.a = a MyObject = A() MyObject.test(10) # A.test(MyObject, 10) -> MyObject.a = 10
dog: у котов внутри есть мурчалка
dog: она реализована для всех котов в классе кот
dog: в объекте кот надо как то вызвать метод мурчало у класса кот
dog: как ты это сделаешь?
dog: кот.мурчало()
dog: ежели ты вызовешь кот.мурчало(), муркнут сразу все коты на свете
dog: а ежели ты вызовешь self.мурчало(), муркнет только тот кот, на которого указывает self
Я бы заменил кот на мурзик. типа того:
dog: у котов внутри есть мурчалка
dog: она реализована для всех котов в классе кот
dog: в объекте мурзик надо как то вызвать метод мурчало у класса кот
dog: как ты это сделаешь?
dog: кот.мурчало()
dog: ежели ты вызовешь кот.мурчало(), муркнут сразу все коты на свете
dog: а ежели ты вызовешь self.мурчало(), муркнет только тот кот, на которого указывает self — т.е. мурзик ))
Аналог слова this из других языков.
В Python «Явное лучше неявного» поэтому его необходимо задавать так конкретно.
Ссылается на конкретный экземпляр класса, а не на класс в целом.
self — это ни в коем случае не зарезервированное слово. Это просто название переменной.
В методах класса первый параметр функции по соглашению именуют self, и это ссылка на сам объект этого класса. Но это именно соглашение. Вы вольны называть параметры как угодно.
Ну вот есть объект и вы хотите создать/изменить поле у этого объекта из метода этого самого объекта.
class Human: def __init__(self): self.blood = 7000 def add_blood(self, volume): self.blood += volume
class Human: def __init__(self): self.blood = 7000 def add_blood(self, volume): self.blood += volume
Здесь создается своя переменная blood в каждом объекте, который создан по шаблону класса Human.
Иначе получишь только одну глобальную переменную для всех и вся:
class Human: def __init__(): blood = 7000 def add_blood(volume): blood += volume
Поэтому важно поучить строготипизированные языки, чтобы понимать что реально происходит, кто кому принадлежит.
Я думаю, для понимания self нужно обратиться к static.
Я далее буду называть поля класса просто переменными класса.
В языке Object Pascal приписка self приписывается автоматически (неявно) к переменным класса. То есть её ставить не надо.
Можно рассматривать класс, как табличку с инструкцией для создания объектов и придания им свойств. Если перед переменой (полем) класса ничего не стоит, значит перед ней неявно присутствует self (в Object Pascal). Такая переменная НЕ меняется в классе (табличке с инструкцией), а присваивается конкретному объекту. То есть такая self переменная в классе (табличке с инструкцией) не изменяется. Чтобы переменная изменилась и в самом классе, нужно перед переменной поставить static. И она будет меняться уже и в самом классе (на той самой пресловутой табличке с инструкцией). Static используют, например, для подсчёта количества созданных объектов. Для этого к static переменной при создании объекта попросту добавляют 1 (единичку). Через конструктор, например. Каждый новый объект будет в результате своего создания добавлять к static переменной ещё одну единичку.
А в Python всё почти что наоборот. Все переменные (поля) класса изначально статичные static (неявно). А чтобы переменную сделать динамической (переменной объекта) то есть self, её просто нужно задать в каком-нибудь методе класса в аргументах. Метод _init_, мне кажется, подойдёт. И назвать, так чтобы она отражала свою сущность – ‘self’ или ‘my_object ‘ (отсылка, что переменная изменяется в объекте, а не в самом классе)
Автор вопроса, плиз ответь мне, таже самая проблема что и у тебя, не понимаю как этот self работает (((
На сколько я понимаю, self — это, своего рода, ссылка на объект. Объект — это экземпляр класса (пример ниже).
class KOT(): def __init__(self, name): self.name = name def muur(self): print(self.name, 'мурчит: мур мур') Matroskin = KOT('Матроскин') # это и есть объект (экземпляр класса) Matroskin.muur() # т.е если я сам, все правильно понял, то self становится Matroskin-ым
Грубо говоря, мы сделали Matroskin-а — главным героем нашего класса. Записали в его паспорт имя «Матроскин». И потом, он обратился к своему навыку muur, чтобы помурлыкать)
self — это обращение именно к объекту,
class Human:
def __init__(self):
self.blood = 7000
self — выступает простым обращением к объекту.
x.blood = 7000 — можно присвоить конкретно этому объекту любое другое значение, например: x.blood = 6500.
соответсвенно и при вызове оно будет изменено
можно ничего не менять и если просто написать, то оно выдаст значение по умолчанию.
>>>x.blood
7000