Qual é o significado de 'self' e '__init__' expressões em Python?[fechado]
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.
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.