hello,
I've written a convenience wrapper around ConfigObj (which is a imporved
ConfigParser).
Now if I use an instance of the base class, I can easily test is the
instance exists by " if ini:",
like in this example
ini = None
if ini:
print 'ok',type(ini)
else:
print 'wrong',type(ini)
ini = ConfigObj (filename)
if ini:
print 'ok',type(ini)
else:
print 'wrong',type(ini)
Now if I derive a new class form this:
class inifile (ConfigObj):
def __init__ (self, filename):
self.ini = ConfigObj ( filename , list_values = False,
write_empty_values = True )
self.ini.newlines = '\r\n' # not strictly necessary
self.Section = ''
self.Modified = False
the test if an instance exists, always returns false.
ini = inifile (filename)
if ini:
print 'ok',type(ini)
else:
print 'wrong',type(ini)
Why is that ?
What should I do to the same simple test for existance ?
thanks,
Stef Mientki 8 3603
On Oct 17, 11:39 pm, stef mientki <stef.mien...@gmail.comwrote:
the test if an instance exists, always returns false.
ini = inifile (filename)
if ini:
print 'ok',type(ini)
else:
print 'wrong',type(ini)
Why is that ?
What should I do to the same simple test for existance ?
First, object construction always gives you an object or raises an
exception, so you don't have to test for existence. If you don't know
if an object has been created, you should initialise ini to None, and
test with 'if ini is not None:'.
'if x' doesn't test if x exists, it tests if x when cast to a bool is
True. ConfigParser acts like a container, and returns False if it's
empty. Your class is (indirectly) a subclass of ConfigParser, but is
never initialised as such, and so is empty. So 'if ini' returns False,
and you get your confused result.
You need to decide if inifile is a subclass of ConfigObj, or is a
wrapper round a ConfigObj. Probably you want the former and your init
method should be something like:
def __init__(self, filename):
ConfigObj.__init__(self, filename, list_values=False,
write_empty_values=True)
self.newlines = '\r\n'
self.Section = ''
self.Modified = False
--
Paul Hankin
stef mientki schrieb:
hello,
I've written a convenience wrapper around ConfigObj (which is a imporved
ConfigParser).
Now if I use an instance of the base class, I can easily test is the
instance exists by " if ini:",
like in this example
ini = None
if ini:
print 'ok',type(ini)
else:
print 'wrong',type(ini)
ini = ConfigObj (filename)
if ini:
print 'ok',type(ini)
else:
print 'wrong',type(ini)
Now if I derive a new class form this:
class inifile (ConfigObj):
def __init__ (self, filename):
self.ini = ConfigObj ( filename , list_values = False,
write_empty_values = True )
self.ini.newlines = '\r\n' # not strictly necessary
self.Section = ''
self.Modified = False
the test if an instance exists, always returns false.
ini = inifile (filename)
if ini:
print 'ok',type(ini)
else:
print 'wrong',type(ini)
Why is that ?
What should I do to the same simple test for existance ?
Use isinstance(obj, type).
Diez
"Diez B. Roggisch" <de***@nospam.web.dewrites:
stef mientki schrieb:
What should I do to the same simple test for existance ?
Use isinstance(obj, type).
No, that's *far* more specific than "does it exist", and will give
false negatives.
Much better is::
foo = None
foo = do_something_to_get_instance()
# ...
if foo is not None:
# foo was bound to an instance correctly
Even better is just to use the object, and if it's not what was
expected, catch the exception at a level that knows what to do about
it.
--
\ "At my lemonade stand I used to give the first glass away free |
`\ and charge five dollars for the second glass. The refill |
_o__) contained the antidote." -- Emo Philips |
Ben Finney
On Wed, 17 Oct 2007 23:12:15 +0000, Paul Hankin wrote:
'if x' doesn't test if x exists, it tests if x when cast to a bool is
True.
To be pedantic:
Python doesn't have type casts. bool(x) doesn't cast x as a bool, it
creates a brand new Boolean object from x.
Also, the "if x" test looks at x.__nonzero__() first, and if that method
doesn't exist, it looks to see if x.__len__() returns 0 or not. See http://docs.python.org/ref/customization.html
--
Steven.
On Thu, 18 Oct 2007 03:00:56 +0000, Steven D'Aprano wrote:
On Wed, 17 Oct 2007 23:12:15 +0000, Paul Hankin wrote:
>'if x' doesn't test if x exists, it tests if x when cast to a bool is True.
To be pedantic:
Python doesn't have type casts. bool(x) doesn't cast x as a bool, it
creates a brand new Boolean object from x.
Actually, to be even more pedantic, True and False are both singletons,
and so bool() doesn't actually create a new Boolean object but reuses the
existing ones.
--
Steven.
En Thu, 18 Oct 2007 00:07:34 -0300, Steven D'Aprano
<st***@REMOVE-THIS-cybersource.com.auescribió:
On Thu, 18 Oct 2007 03:00:56 +0000, Steven D'Aprano wrote:
>On Wed, 17 Oct 2007 23:12:15 +0000, Paul Hankin wrote:
>>'if x' doesn't test if x exists, it tests if x when cast to a bool is True.
To be pedantic:
Python doesn't have type casts. bool(x) doesn't cast x as a bool, it creates a brand new Boolean object from x.
Actually, to be even more pedantic, True and False are both singletons,
and so bool() doesn't actually create a new Boolean object but reuses the
existing ones.
To be even more pedantic, 'if x' does not invoke the builtin bool(),
instead it uses PyObject_IsTrue, which returns a plain C integer, not a
Python bool object.
--
Gabriel Genellina
Ben Finney wrote:
"Diez B. Roggisch" <de***@nospam.web.dewrites:
>stef mientki schrieb:
What should I do to the same simple test for existance ?
Use isinstance(obj, type).
No, that's *far* more specific than "does it exist", and will give
false negatives.
I've misread the post entirely, so just... discard my message :)
Diez
On Oct 17, 8:00 pm, Steven D'Aprano <st...@REMOVE-THIS-
cybersource.com.auwrote:
On Wed, 17 Oct 2007 23:12:15 +0000, Paul Hankin wrote:
'if x' doesn't test if x exists, it tests if x when cast to a bool is
True.
To be pedantic:
Python doesn't have type casts. bool(x) doesn't cast x as a bool, it
creates a brand new Boolean object from x.
Also, the "if x" test looks at x.__nonzero__() first, and if that method
doesn't exist, it looks to see if x.__len__() returns 0 or not. See
http://docs.python.org/ref/customization.html
To be lazy, you can get away with 'if x:' if you *know* that neither
the class nor its superclasses override .__nonzero__ or .__len__,
because the instance then defaults to true. Classes that *do*
override these methods are generally emulating a numeric or collection
type, or are using False to signal "something isn't there".
ConfigParser is doing the latter. That may or may not have been a
good choice by the ConfigParser developers, because it's debatable how
useful it is for empty ConfigParsers to be False. But the fact
remains that it is this way, and an instance of *any* third-party
class may be false for reasons you don't expect.
--Mike This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: SeeBelow |
last post by:
I see the value of a class when two or more instances will be created,
but Python programmers regularly use a class when there will only be one
instance.
What is the benefit of this? It has a...
|
by: Ali |
last post by:
Hi,
I have a script which I double-click to run. If i double-click it
again, it will launch another instance of the script.
Is there a way to allow only one instance of a script, so that if...
|
by: Suzanne Vogel |
last post by:
** Is there a way (C++ syntax) to specify that a pointer should refer to
an object that derives from *two* specific classes?
eg, Suppose I have two classes, 'A' and 'B', and I want to specify...
|
by: kon george |
last post by:
Can somebody assist. I build this code on a dev laptop and copied across
the
entire code to a Windows 2003 server with 1.1 framework. It is basic
ASP.NE
T that uses web service for SQL Server...
|
by: mytfein |
last post by:
Hi Everyone,
Background:
Another department intends to ftp a .txt file from the mainframe, for me
to process.
The objective is to write a vb script that would be scheduled to run
daily to...
|
by: twick10 |
last post by:
I know this is probably a very basic question.
Can someone tell me the syntax to check to see if an instance of an object
exists?
I want to:
If (does this instance exist) Then
..........
|
by: alexia.bee |
last post by:
Hi all,
In some weird reason, excel instance won;t die if i remove the comment
from 4 lines of setting values into struct.
here is a snipcode
public...
|
by: Mesan |
last post by:
Hello everyone,
Thanks to many useful posts in this newsgroup and others, I've been
able to come very close to something I've been wanting to do for a
very long time.
I've figured out how to...
|
by: Jim Langston |
last post by:
Windows. Situation: Using a Python program called OpenRPG. I have a program
that displays form data (a character sheet) in C++. I am able in the C++
program to build a string and copy it into the...
|
by: isladogs |
last post by:
The next Access Europe meeting will be on Wednesday 4 Oct 2023 starting at 18:00 UK time (6PM UTC+1) and finishing at about 19:15 (7.15PM)
The start time is equivalent to 19:00 (7PM) in Central...
|
by: Aliciasmith |
last post by:
In an age dominated by smartphones, having a mobile app for your business is no longer an option; it's a necessity. Whether you're a startup or an established enterprise, finding the right mobile app...
|
by: giovanniandrean |
last post by:
The energy model is structured as follows and uses excel sheets to give input data:
1-Utility.py contains all the functions needed to calculate the variables and other minor things (mentions...
|
by: NeoPa |
last post by:
Hello everyone.
I find myself stuck trying to find the VBA way to get Access to create a PDF of the currently-selected (and open) object (Form or Report).
I know it can be done by selecting :...
|
by: NeoPa |
last post by:
Introduction
For this article I'll be using a very simple database which has Form (clsForm) & Report (clsReport) classes that simply handle making the calling Form invisible until the Form, or all...
|
by: Teri B |
last post by:
Hi, I have created a sub-form Roles. In my course form the user selects the roles assigned to the course.
0ne-to-many. One course many roles.
Then I created a report based on the Course form and...
|
by: isladogs |
last post by:
The next Access Europe meeting will be on Wednesday 1 Nov 2023 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM)
Please note that the UK and Europe revert to winter time on...
|
by: nia12 |
last post by:
Hi there,
I am very new to Access so apologies if any of this is obvious/not clear.
I am creating a data collection tool for health care employees to complete. It consists of a number of...
|
by: NeoPa |
last post by:
Introduction
For this article I'll be focusing on the Report (clsReport) class. This simply handles making the calling Form invisible until all of the Reports opened by it have been closed, when it...
| |