Как избежать явный 'сам' в Python?

Я изучал Python следующим некоторые pygame учебные руководства.

Там я нашел широкое применение ключевого слова сам, и прибывающий из, прежде всего, фон Java, я нахожу, что продолжаю забывать вводить сам. Например, вместо self.rect.centerx Я ввел бы rect.centerx, потому что, мне, реагируют уже, членская переменная класса.

Параллель Java, о которой я могу думать для этой ситуации, должна снабдить префиксом все ссылки на членские переменные с этим.

Застревают я снабжающий префиксом все членские переменные сам или там способ объявить их, которые позволили бы мне избегать необходимости делать так?

Даже если то, что я предлагаю, не является pythonic, я все еще хотел бы знать, возможно ли это.

Я смотрел на них связанные ТАК вопросы, но они не вполне отвечают, что я после:

111
задан Community 23 May 2017 в 10:31
поделиться

5 ответов

Python требует указать себя. В результате никогда не возникает путаницы в том, что является членом, а что нет, даже если не видно полного определения класса. Это приводит к таким полезным свойствам, как: нельзя добавлять члены, которые случайно тенеют нечленами и тем самым ломают код.

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

class A(some_function()):
  def f(self):
    self.member = 42
    self.method()

Это полный код! (some_function возвращает тип, используемый в качестве базового)

Другой, где методы класса написаны динамически:

class B(object):
  pass

print B()
# <__main__.B object at 0xb7e4082c>

def B_init(self):
  self.answer = 42
def B_str(self):
  return "<The answer is %s.>" % self.answer
# notice these functions require no knowledge of the actual class
# how hard are they to read and realize that "members" are used?

B.__init__ = B_init
B.__str__ = B_str

print B()
# <The answer is 42.>

Запомните, оба этих примера экстремальны, и вы не увидите их каждый день, и я не предлагаю часто писать код подобного рода, но в них четко видны аспекты явной необходимости в себе.

.
90
ответ дан 24 November 2019 в 03:04
поделиться

На самом деле self - это не ключевое слово, это просто название, условно даваемое первому параметру методов экземпляров на языке Python. И этот первый параметр пропустить нельзя, так как это единственный механизм, которым обладает метод, знающий, к какому экземпляру вашего класса он обращается.

.
25
ответ дан 24 November 2019 в 03:04
поделиться

Вы можете использовать любое имя, например

class test(object):
    def function(this, variable):
        this.variable = variable

или даже

class test(object):
    def function(s, variable):
        s.variable = variable

, но вы застряли с использованием имени для области видимости.

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

21
ответ дан 24 November 2019 в 03:04
поделиться

self является частью синтаксиса питонов для доступа к членам объектов, так что, боюсь, вы застряли с этим

.
5
ответ дан 24 November 2019 в 03:04
поделиться

да, вы всегда должны указывать self , потому что явное лучше, чем неявное, согласно философии Python.

Вы также обнаружите, что способ программирования на python сильно отличается от способа программирования на java, поэтому использование self имеет тенденцию к уменьшению, поскольку вы не проецируете все внутри объекта. . Скорее, вы шире используете функции уровня модуля, которые можно лучше протестировать.

между прочим. Сначала я ненавидел это, теперь я ненавижу противоположное. то же самое для управления потоком с отступом.

9
ответ дан 24 November 2019 в 03:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: