IIRC self стоит на месте строки в основном коде, поэтому self должно быть
строка, такая как «Mtn. Dew, 1.00,10» и ожидаемый результат
Метод split (",") должен формировать список вроде ["Mtn. Dew", "1.00", "10"]
где я могу затем использовать индекс этого списка, чтобы вернуть только имя.
Подожди минутку. Это распространенное заблуждение, когда люди учатся кодировать. По сути, вы путаете исходный код с типом данных str
. Это простая ошибка, так как каждый создает текстовый файл, когда пишет исходный код. Один пишет текст в файл, а другой может даже загрузить его в Python (open('my_script.py').read())
, и мы получим строку! И да, строки потребляются программами, которые вы запускаете, когда ваш исходный код переходит от вашего языка программирования к машинному коду Но я выступаю за то, чтобы вы держали эти две вещи в своем разуме отдельно. Ваш исходный код не является строкой . Он должен концептуально находиться «над» этим (и в любом случае, здесь мы имеем дело с полезными абстракциями). Итак, пока ваша идея по существу верна,
self стоит на месте строки в основном коде
Но здесь «строка» означает, что строка относится к , фрагменту логики, выполняемой вашим кодом, а не буквально строке кода, которую вы пишете. Так, self
относится к объекту instance , когда метод выполняется экземпляром класса.
Итак, self
- это , а не строка . Это объект того типа, который определяет ваш класс. У вашего класса нет этого метода. str
объекты делают.
Вот небольшой взгляд на модель данных Python. «Я» довольно просто. Сам экземпляр передается в качестве аргумента. Это делается под прикрытием для вас «магией» (магией, с которой вы можете научиться играть позже), но по существу, my_instance.some_method()
в основном эквивалентно MyClass.some_method(my_instance)
Итак, рассмотрим,
In [1]: class SomeClass:
...: def __init__(self, name):
...: self.name = name
...: def foo(self):
...: print(self.name, 'says foo!')
...:
In [2]: some_instance = SomeClass('Juan')
In [3]: some_instance.foo()
Juan says foo!
In [4]: SomeClass.foo(some_instance)
Juan says foo!
Метод - это просто функция, которая является частью класса, и если он вызывается экземпляром этого класса, он автоматически получает экземпляр , сам , переданный в качестве первого аргумента. Обратите внимание, что здесь предпочтительна позиция аргумента, а не имя self , которое является просто условным обозначением. Это может быть что угодно. Имена даже не должны быть согласованными в классе (но, конечно, согласованными внутри самой функции). Давайте назовем это цуккини для удовольствия:
In [8]: class WhyNot:
...:
...: def __init__(self):
...: self.foo_flag = False
...: self.bar_flag = False
...:
...: def foo(zucchini):
...: print("I speak American English")
...: zucchini.foo_flag = True
...:
...: def bar(courgette):
...: print("And British English")
...: courgette.bar_flag = True
...:
In [9]: x = WhyNot()
In [10]: x.foo()
I speak American English
In [11]: x.bar()
And British English
In [12]: x.foo_flag
Out[12]: True
In [13]: x.bar_flag
Out[13]: True
Но, пожалуйста, придерживайтесь соглашения.