Hi all,
I have this program
class Company:
def __init__(self, revenues, costs):
self.revenues = revenues
self.costs = costs
def __getattr__(sel f, name):
if name == 'profits':
return self.revenues - self.costs
c = Company(100, 75)
print c.revenues
print c.costs
print c.profits
import cPickle
print cPickle.dumps(c )
Everything works fine up until the last line. If I remove the
__getattr__ function, then everything works (except "print c.profits").
What is the cPickle class trying to get to that is causing my
__getattr__ function to be called?
-Chris 3 1811
Chris Curvey wrote: Hi all,
I have this program
class Company: def __init__(self, revenues, costs): self.revenues = revenues self.costs = costs
def __getattr__(sel f, name): if name == 'profits': return self.revenues - self.costs
c = Company(100, 75) print c.revenues print c.costs print c.profits
import cPickle print cPickle.dumps(c )
Everything works fine up until the last line. If I remove the __getattr__ function, then everything works (except "print c.profits"). What is the cPickle class trying to get to that is causing my __getattr__ function to be called?
Potentially lots of things. But the problem isn't that cPickle is
calling __getattr__, exactly. The problem is that your __getattr__
isn't properly signalling non-existent attributes. You should raise
AttributeError instead of implicitly returning None for which there is
no attribute. Adding "raise AttributeError( name)" to the end of the
definition unbreaks it enough to let pickle work.
Jp
-Chris
> Potentially lots of things. But the problem isn't that cPickle is calling __getattr__, exactly. The problem is that your __getattr__ isn't properly signalling non-existent attributes. You should raise AttributeError instead of implicitly returning None for which there is no attribute. Adding "raise AttributeError( name)" to the end of the definition unbreaks it enough to let pickle work.
Ah, that's it. Many thanks!
Chris Curvey wrote: Hi all,
I have this program
class Company: def __init__(self, revenues, costs): self.revenues = revenues self.costs = costs
def __getattr__(sel f, name): if name == 'profits': return self.revenues - self.costs
c = Company(100, 75) print c.revenues print c.costs print c.profits
import cPickle print cPickle.dumps(c )
Everything works fine up until the last line. If I remove the __getattr__ function, then everything works (except "print c.profits"). What is the cPickle class trying to get to that is causing my __getattr__ function to be called?
-Chris
When you use __getattr__, you should always raise an attribute error for
names that you don't handle.
def __getattr__(sel f, name):
if name == 'profits':
return self.revenues - self.costs
else:
raise AttributeError, name
Paul This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: Richard Kessler |
last post by:
I am attempting a GUI using BOA Constructor. I have some simple code to
pickle an object, but for some reason when I use cPickle it hangs the
system, but pickle works just fine. I do not have a clue why cPickle will
not work.
The code is
myObj = MyObject()
myObj.SetSomeProperties
f = open("my file name",'w')
|
by: sh |
last post by:
Hi guys,
Well, I have a (maybe dumb) question.
I want to write my own little blog using Python (as a fairly small but doable
project for myself to learn more deaply Python in a web context).
I don't want so far to use a database as a backend, I'd prefer use XML which is
enough for a small amount of data the blog would have to deal with.
|
by: Alex Polite |
last post by:
I need to put recursive data structures on disc and found out that cPickle
doesn't like recursion.
What are my options?
alex
--
Alex Polite
http://polite.se
|
by: Marcus Lowland |
last post by:
Hello, I'm fairly new to python and have read about and wanted to begin
experimenting with cpickle. As I understand, this should be a native
module in the python library. I have python 2.3 and now just installed
2.4, but am not able to import or find cpickle.py in any directory of
the install, or in the previous version (pickle.py is present and
imports correctly). Is there a seperate module package that must be
downloaded and installed......
|
by: Mingus Tsai |
last post by:
Hello- please help with unpickling problem:
I am using Python version 2.3.4 with IDLE version 1.0.3 on a Windows
XPhome system.
My problem is with using cPickle to deserialize my pickled arrays of
datetime.datetime instances. The following is the code I have written:
import cPickle, datetime
import Numeric
| |
by: Carl J. Van Arsdall |
last post by:
Hey everyone, cPickle is raising an ImportError that I just don't quite
understand. Before I paste the code, let me explain the application.
Basically the part of the application that failed is a function that
loads a list of objects from a file using cPickle. This list is a queue
of requests. I've done some research and it looks like cPickle tries to
load some modules as some kind of test. From what I can tell the module
that cPickle...
|
by: Jeff Poole |
last post by:
This is going to be a pretty vague message because it involves a large
block of code I'd rather avoid posting. Basically, I've been pickling
a dictionary of instances of a class I've created (which contains
references to other instances of other classes). At some point in the
last few weeks, pickling has stopped working with the following error:
Traceback (most recent call last):
File "./generateTools.py", line 50, in ?...
|
by: Victor Kryukov |
last post by:
Hello list,
The following behavior is completely unexpected. Is it a bug or a by-
design feature?
Regards,
Victor.
-----------------
|
by: Enrico |
last post by:
Hi there,
I have the following situation (I tryed to minimize the code to concentrate
on the issue):
def __getattr__(self, name):
print 'A.__getattr__'
if name == 'a': return 1
raise AttributeError('%s not found in A' % name)
def __getattr__(self, name):
|
by: Hystou |
last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it.
First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
|
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed.
This is as boiled down as I can make it.
Here is my compilation command:
g++-12 -std=c++20 -Wnarrowing bit_field.cpp
Here is the code in...
| |
by: jinu1996 |
last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth.
The Art of Business Website Design
Your website is...
|
by: Hystou |
last post by:
Overview:
Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
|
by: tracyyun |
last post by:
Dear forum friends,
With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
|
by: isladogs |
last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM).
In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules.
He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms.
Adolph will...
|
by: conductexam |
last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one.
At the time of converting from word file to html my equations which are in the word document file was convert into image.
Globals.ThisAddIn.Application.ActiveDocument.Select();...
|
by: TSSRALBI |
last post by:
Hello
I'm a network technician in training and I need your help.
I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs.
The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols.
I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
| |
by: muto222 |
last post by:
How can i add a mobile payment intergratation into php mysql website.
| |