Learning inheritance

2010-09-18 Thread Niklasro
Hi
How can I make the visibility of a variable across many methods or
files? To avoid repeating the same line eg url =
os.environ['HTTP_HOST'] if os.environ.get('HTTP_HOST') else
os.environ['SERVER_NAME'] I repeat for many methods. So declaring it
to a super class and inheriting it is my plan. Do you agree or propose
otherwise?
Thanks
Niklas
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Learning inheritance

2010-09-18 Thread bruno.desthuilli...@gmail.com
On 18 sep, 17:25, Niklasro  wrote:
> Hi
> How can I make the visibility of a variable across many methods or
> files? To avoid repeating the same line eg     url =
> os.environ['HTTP_HOST'] if os.environ.get('HTTP_HOST') else
> os.environ['SERVER_NAME']

First learn to use Python correctly:

url = os.environ.get("HTTP_HOST", os.environ["SERVER_NAME"])

=> dict.get(key, default=None)

Also and FWIW, neither HTTP_HOST not SERVER_NAME are really urls...

> I repeat for many methods. So declaring it
> to a super class and inheriting it is my plan. Do you agree or propose
> otherwise?

Not enough background to answer.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Learning inheritance

2010-09-18 Thread Jorgen Grahn
On Sat, 2010-09-18, Niklasro wrote:
> Hi
> How can I make the visibility of a variable across many methods or
> files? To avoid repeating the same line eg url =
> os.environ['HTTP_HOST'] if os.environ.get('HTTP_HOST') else
> os.environ['SERVER_NAME'] I repeat for many methods. So declaring it
> to a super class and inheriting it is my plan. Do you agree or propose
> otherwise?

Inheritance is not the main tool for sharing code. Just make it a
function and place it in one of your modules (files):

def get_host():
   """Return the environment's $HTTP_HOST if
   it exists, otherwise $SERVER_NAME or (if that
   doesn't exist either) None.
   """
   ...

Perhaps you are focusing too much on inheritance in general.
I personally almost never use it in Python -- it has much fewer
uses here than in staticaly typed languages.

/Jorgen

-- 
  // Jorgen GrahnO  o   .
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Learning inheritance

2010-09-18 Thread Niklasro
On Sep 18, 4:13 pm, "bruno.desthuilli...@gmail.com"
 wrote:
> On 18 sep, 17:25, Niklasro  wrote:
>
> > Hi
> > How can I make the visibility of a variable across many methods or
> > files? To avoid repeating the same line eg     url =
> > os.environ['HTTP_HOST'] if os.environ.get('HTTP_HOST') else
> > os.environ['SERVER_NAME']
>
> First learn to use Python correctly:
>
> url = os.environ.get("HTTP_HOST", os.environ["SERVER_NAME"])
>
> => dict.get(key, default=None)
>
> Also and FWIW, neither HTTP_HOST not SERVER_NAME are really urls...
>
> > I repeat for many methods. So declaring it
> > to a super class and inheriting it is my plan. Do you agree or propose
> > otherwise?
>
> Not enough background to answer.

Thanks for replying and informing correctness. More background is the
variable I want accessible for many functions and files either is
HTTP_HOST or SERVER_NAME used as beginning of url or resource locator
indicated where the software is used. Instead of declaring the
variable many times feasibility study is how to minify number of times
I declare the same variable. I got 2 files main.py and i18n both with
webapp request handlers which I would like access the variable.
Thanks
Niklas R
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Learning inheritance

2010-09-18 Thread Carl Banks
On Sep 18, 4:15 pm, Jorgen Grahn  wrote:
> On Sat, 2010-09-18, Niklasro wrote:
> > Hi
> > How can I make the visibility of a variable across many methods or
> > files? To avoid repeating the same line eg     url =
> > os.environ['HTTP_HOST'] if os.environ.get('HTTP_HOST') else
> > os.environ['SERVER_NAME'] I repeat for many methods. So declaring it
> > to a super class and inheriting it is my plan. Do you agree or propose
> > otherwise?
>
> Inheritance is not the main tool for sharing code.

That statement might be a little too general to be true.  Inheritance
is a (or the) main tool for different objects to share behavior, which
is implemented by code.  So when your program is organized around
objects, it is the (or a) main tool.

You are right that you shouldn't rework your code into an OO style
simply because you want to share code.  I think that's what you meant.


> Just make it a
> function and place it in one of your modules (files):

Or even just make it a global variable in the module (which would work
in this case, unless you plan to update the environment within the
program).


Carl Banks
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Learning inheritance

2010-09-18 Thread alex23
Niklasro  wrote:
> I got 2 files main.py and i18n both with
> webapp request handlers which I would like access the variable.

I'd probably use a module for this. Create a third file, called
something like shared.py, containing the line that bruno gave above:

url = os.environ.get("HTTP_HOST", os.environ["SERVER_NAME"])

Then from within both main & i18n you can 'import shared' and access
the variable as 'shared.url'.

Python only actually executes a module the first time it's imported,
every other import will be given a reference to the same module
object. This also lets you share temporary data between modules. Any
module that imports 'shared' can add an attribute to it ('shared.foo =
"barbaz"') that will be visible to all other modules that have (or
will have) imported it.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Learning inheritance

2010-09-19 Thread Niklasro
On Sep 18, 11:15 pm, Jorgen Grahn  wrote:
> On Sat, 2010-09-18, Niklasro wrote:
> > Hi
> > How can I make the visibility of a variable across many methods or
> > files? To avoid repeating the same line eg     url =
> > os.environ['HTTP_HOST'] if os.environ.get('HTTP_HOST') else
> > os.environ['SERVER_NAME'] I repeat for many methods. So declaring it
> > to a super class and inheriting it is my plan. Do you agree or propose
> > otherwise?
>
> Inheritance is not the main tool for sharing code. Just make it a
> function and place it in one of your modules (files):
>
> def get_host():
>    """Return the environment's $HTTP_HOST if
>    it exists, otherwise $SERVER_NAME or (if that
>    doesn't exist either) None.
>    """
>    ...
>
> Perhaps you are focusing too much on inheritance in general.
> I personally almost never use it in Python -- it has much fewer
> uses here than in staticaly typed languages.
>
> /Jorgen
>
> --
>   // Jorgen Grahn  \X/     snipabacken.se>   O  o   .

Thanks for sharing the knowledge. I alternatively think about
declaring the variable in a setting.py file and import it. It doesn't
create many objects but I want to learn more professional code
conventions than same test repeated.
Sincerely,
Niklas R
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Learning inheritance

2010-09-19 Thread Niklasro
On Sep 19, 2:31 am, alex23  wrote:
> Niklasro  wrote:
> > I got 2 files main.py and i18n both with
> > webapp request handlers which I would like access the variable.
>
> I'd probably use a module for this. Create a third file, called
> something like shared.py, containing the line that bruno gave above:
>
> url = os.environ.get("HTTP_HOST", os.environ["SERVER_NAME"])
>
> Then from within both main & i18n you can 'import shared' and access
> the variable as 'shared.url'.
>
> Python only actually executes a module the first time it's imported,
> every other import will be given a reference to the same module
> object. This also lets you share temporary data between modules. Any
> module that imports 'shared' can add an attribute to it ('shared.foo =
> "barbaz"') that will be visible to all other modules that have (or
> will have) imported it.

I try a file setting.py declaring it like this just loose in the file
not knowing much theory about it thinking it's easy and intuitive.
Thanks
Niklas
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Learning inheritance

2010-09-19 Thread Niklasro
It works but I don't know whether it's formally inheritance or class
variable.

Before code was
url = os.environ['HTTP_HOST'] if os.environ.get('HTTP_HOST') else
os.environ['SERVER_NAME']
if url.find('niklas') > 0:

and now the change saves me from repeating myself!

util.py:
url = os.environ.get("HTTP_HOST", os.environ["SERVER_NAME"]) #declared
as class variable(?)

And viola just test if util.url.find('niklas') > 0:

Exactly what I wanted to do with your experienced guidance.

Many thanks
Happy refactored
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Learning inheritance

2010-09-19 Thread Thomas Jollans
On 2010-09-19 09:22, Niklasro wrote:
> util.py:
> url = os.environ.get("HTTP_HOST", os.environ["SERVER_NAME"]) #declared
> as class variable(?)
>   
There is no class here, so this is no class variable, and you're not
inheriting anything. You're simply using a module.

> And viola just test if util.url.find('niklas') > 0:
>
> Exactly what I wanted to do with your experienced guidance.
>
> Many thanks
> Happy refactored
>   

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Learning inheritance

2010-09-19 Thread Niklasro
On Sep 19, 8:12 am, Thomas Jollans  wrote:
> On 2010-09-19 09:22, Niklasro wrote:> util.py:
> > url = os.environ.get("HTTP_HOST", os.environ["SERVER_NAME"]) #declared
> > as class variable(?)
>
> There is no class here, so this is no class variable, and you're not
> inheriting anything. You're simply using a module.
>
> > And viola just test if util.url.find('niklas') > 0:
>
> > Exactly what I wanted to do with your experienced guidance.
>
> > Many thanks
> > Happy refactored
>
>
Good to learn what I'm doing :-) since important being able to explain
choices taken farther than "doing it because it works".
I understand the concept of modules may not correspond to java
programming where I come from.
Sincerely with thanks for the help,
Niklas
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Learning inheritance

2010-09-20 Thread Bruno Desthuilliers

alex23 a écrit :


Python only actually executes a module the first time it's imported,


Beware of multithreading and modules imported under different names... 
There can be issues with both in some web frameowrks.


--
http://mail.python.org/mailman/listinfo/python-list


Re: Learning inheritance

2010-09-20 Thread Bruno Desthuilliers

Niklasro a écrit :

Good to learn what I'm doing :-) since important being able to explain
choices taken farther than "doing it because it works".
I understand the concept of modules may not correspond to java
programming where I come from.


Coming from Java - and specially if you only have experience with Java 
-, you'll have to unlearn quite a few things. Python is 100% object - in 
that everything you can bind to a name is an object, including classes, 
functions, methods, and even modules - but it doesn't try to force you 
into using classes when you don't need them.


--
http://mail.python.org/mailman/listinfo/python-list


Re: Learning inheritance

2010-09-20 Thread alex23
Bruno Desthuilliers 
wrote:
> alex23 a écrit :
> > Python only actually executes a module the first time it's imported,
>
> Beware of multithreading and modules imported under different names...
> There can be issues with both in some web frameowrks.

Good points, Bruno, thank you.

Niklasro, a good example of Bruno's second point: running a module as
a script and then importing it elsewhere later will execute the module
in the second import, creating two module objects - '__main__' and
''.

The issue with threading is the more important one of which to be
aware.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Learning inheritance

2010-09-25 Thread Niklasro
On Sep 20, 7:39 am, Bruno Desthuilliers  wrote:
> Niklasro a écrit :
>
> > Good to learn what I'm doing :-) since important being able to explain
> > choices taken farther than "doing it because it works".
> > I understand the concept of modules may not correspond to java
> > programming where I come from.
>
> Coming from Java - and specially if you only have experience with Java
> -, you'll have to unlearn quite a few things. Python is 100% object - in
> that everything you can bind to a name is an object, including classes,
> functions, methods, and even modules - but it doesn't try to force you
> into using classes when you don't need them.

Which is good since always questioning the empty declarations Java has
we know empty getters and setters forced to a class and interfaces
with nothing but names and no logic. With this respect I prefer python
solving same problem with ½ MB python 30 MB J2EE used to with drawback
only that Java had the faster physical response. You can have the
buggiest code respond the fastest like a hijacked environment
physically boosted you don't want and naturally choosing the slower
physical response time in favor of decent development environment.
Thanks
Niklas
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Learning inheritance

2010-09-25 Thread Niklasro
On Sep 21, 1:30 am, alex23  wrote:
> Bruno Desthuilliers 
> wrote:
>
> > alex23 a écrit :
> > > Python only actually executes a module the first time it's imported,
>
> > Beware of multithreading and modules imported under different names...
> > There can be issues with both in some web frameowrks.
>
> Good points, Bruno, thank you.
>
> Niklasro, a good example of Bruno's second point: running a module as
> a script and then importing it elsewhere later will execute the module
> in the second import, creating two module objects - '__main__' and
> ''.
>
> The issue with threading is the more important one of which to be
> aware.

I follow it means learning when constructors get called twice.
Normally a constructor should get called once only.
Many thanks for the insights both solving my problem and referencing
important topics
-- 
http://mail.python.org/mailman/listinfo/python-list