Jump to content
FilhoDoSol

Objectos em Python

Recommended Posts

FilhoDoSol

Boa noite,

pareço com nabo a tentar perceber a maneira como o python lida com os objectos.

Eu defini 3 classes num dos meus modules. Essas classes são inicializadas uma e uma só vez, e quero que sejam usadas em vários modules ao longo da execução do meu programa. No entanto, não queria estar a passar o objecto por paramêtro até onde precisar desse objecto.

Por essa razão, decidi criar 3 variáveis globais num dos modules. Assim, no inicio criava os objectos, e apontava essas três variáveis para esses objectos. Depois, cada vez que precisase de mexer nesses objectos era só fazer import do module onde elas estão definidas.

Isto não funciona, e eu entendo +/- porquê. Quando tento usar essas variáveis noutro module, estes não "adivinham" que aquela variável é do objecto que especifiquei anteriormente e por isso não o IDE não me dá acesso aos métodos dessa classe.

Alguém me ajuda a resolver esta situação?

Share this post


Link to post
Share on other sites
thoga31

O tópico explica muito bem o que pretendes, mas falta algo essencial: código.


Knowledge is free!

Share this post


Link to post
Share on other sites
FilhoDoSol

Module 1

# 'singleton' classes used by all scripts
environmentRepresentation = None
class EnvironmentVariables (object):
filename = "environment.txt"
def __init__ (self):
    self.username = None
    self.passwd = None
    self.package_directory = None
    self.mysql_root = None
    self.parseEnvironmentFile()
def parseEnvironmentFile(self):
    environmentFile = open (EnvironmentVariables.filename, "r+")
    lines = environmentFile.readlines()
    for singleLine in lines:
        if singleLine[0] != '#' and singleLine != "\n":
            singleLine = removeNewLine (singleLine)
            splittedLine = singleLine.split (" ")
            if splittedLine[0] == "USERNAME":
                self.username = splittedLine[1]
            elif splittedLine[0] == "PASSWORD":
                self.passwd = splittedLine[1]
            elif splittedLine[0] == "PACKAGE_DIRECTORY":
                self.package_directory = splittedLine[1]
            elif splittedLine[0] == "MYSQL_ROOT":
                self.mysql_root = splittedLine[1]

No outro module faço o seguinte:

## parse txt's at the beggining ##
environmentRepresentation = EnvironmentVariables()
environmentRepresentation.

Pronto, e neste module, não consigo aceder às variáveis/métodos.

Tenho uns deployments para fazer e escolhi python porque sei que é uma linguagem rápida de progamar. Além disso comecei a aprender python hoje. :P

Por isso provavelmente isto é uma gralha fácil de resolver.

EDITED:

Odeio-me neste momento.

A culpa não era minha, "era do IDE". O IDE é que não me faz o auto-complete. :D

Edited by thoga31
GeSHi

Share this post


Link to post
Share on other sites
FilhoDoSol

EDITED_2:

Afinal isto ainda não está como eu quero..

As variáveis globais do module são "reseted" a cada import que faço. Ou seja, eu iniciei as variáveis num dos scripts, e mais tarde, ao fazer import do module que contém as variáveis noutro lado, a variável está "limpa", e tenho que a iniciar outra vez.

Como ultrapasso isto?

Share this post


Link to post
Share on other sites
FilhoDoSol

O video é excelente. Obrigado.

Entretanto ontem acabei por resolver da seguinte maneira:

def getBenchmarkSpecs():
global specs
if not specs:
    specs = BenchmarkSpecs()
return specs

e cada vez que preciso de aceder ao objecto chamo esse método, de qualquer ponto do código. Cumpre aquilo que quero, mas vou fazer umas modificações, tal como recomenda o video.

Cumps. ;)

Edited by thoga31
GeSHi

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.