Pergunta

Eu não entendo o que estes são utilizados, particularmente a self argumento?Poderia alguma por favor, explique isso para mim e por que diabos você iria querer passar isso em?

Além disso, eu sempre pensei __init__ foi para 'inicialização', mas não me ocorreu que eu nunca tive que colocar nada aqui antes.Alguém poderia me dar um exemplo fácil?

editar:eu só fico tão confusa toda vez que eu ver self sendo passados para uma função, ou algo semelhante.

Foi útil?

Solução

self é o objeto que você está chamando o método.É um pouco como this em Java.

__init__ é chamado em cada objeto quando ele é criado para o inicializar.É como se o construtor em Java.

Portanto, você deveria usar __init__ sempre que você queria para definir os atributos de membro de variáveis em Java - do objeto quando ele foi criado.Se você está feliz com um "vazio" do objeto que você não precisa de uma __init__ o método, mas se você deseja criar um objeto com argumentos você vai precisar de um.

Um exemplo seria:

class StackOverflowUser:
    def __init__(self, name, userid, rep): 
        self.name = name
        self.userid = userid
        self.rep = rep

dave = StackOverflowUser("Dave Webb",3171,500)

Podemos então olhar para o objeto que criamos:

>>> dave.rep
500
>>> dave.name
'Dave Webb'

Assim, podemos ver __init__ é passado, os argumentos deu para o construtor, juntamente com self, que é a referência para o objeto que foi criado.Em seguida, usamos self quando nós processo de argumentos e atualizar o objeto adequadamente.

Há a questão de por que Python tem self quando outras línguas, não precisar dela.De acordo com o Python FAQ:

Por que o 'eu' ser usados explicitamente no método definições e chamadas?

Primeiro, é mais óbvio que você está usando um método de instância ou de atributo, em vez de uma variável local...

Segundo, isso significa que nenhuma sintaxe especial é necessária se você quiser referenciar explicitamente ou chamar o método de uma determinada classe...

Finalmente, para variáveis de instância que resolve um problema sintático com a atribuição de:desde variáveis locais em Python são (por definição!) essas variáveis para que um valor atribuído no corpo de uma função (e que não são explicitamente declaradas global), tem que haver alguma maneira de dizer o intérprete que uma atribuição era para atribuir a uma variável de instância em vez de uma variável local, e deve ser, de preferência, sintáticas (por razões de eficiência)...

Outras dicas

Self é por convenção a instância do objeto que você está chamando de método.

Por exemplo:

class MyClass:
  """A simple example class"""
  def __init__(self):
    print "MyClass class created"
  i = 12345
  def f(self):
    return self.i

# Create an object called a of type MyClass. This will print "MyClass class created"
a = MyClass()

# Run the method - should return 12345
print a.f()

# Make another instance of the class to illustrate they are separate.
b = MyClass()
# Set a.i to another value.
a.i = 1

# Note the result
print a.f()
print b.f()

A propósito, você não precisa se chamar, pode chamá -lo do que quiser. Sempre será o primeiro parâmetro.

Pense nisso como o parâmetro "Este" em C ++ / Java: é usado para fazer referência a uma instância de uma classe.

Class Whatever:   
  def __init__(self, some_parameter):   
    self.instance_parameter = some_parameter

Imagine __init__ Como uma instância de classe construtor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top