[Tutor] attribute overwrite
Prasad, Ramit
ramit.prasad at jpmorgan.com
Sat Dec 10 00:16:46 CET 2011
>class DateTime(datetime.datetime):
> def __init__(self, year, month, day, *args):
> super().__init__()
> if self.year >= 1000:
> self.year = self.year % 1000
I have no idea how you could use the sample you have given (or why) but, this was actually a fun exercise that forced me to learn more about immutable types (which makes sense because a date should never really be modifiable if you think about it). Instead of overriding the __init__ you need to override the __new__ method. Try the following
>>> class DateTime(datetime.datetime):
... def __new__(self, year, month, day, *args):
... if year >= 1000:
... year = year % 1000
... return super( DateTime, self ).__new__(self, year, month, day, *args )
...
>>> DateTime( 2011, 1, 1 )
DateTime(11, 1, 1, 0, 0)
Ramit
Ramit Prasad | JPMorgan Chase Investment Bank | Currencies Technology
712 Main Street | Houston, TX 77002
work phone: 713 - 216 - 5423
--
From: tutor-bounces+ramit.prasad=jpmorgan.com at python.org [mailto:tutor-bounces+ramit.prasad=jpmorgan.com at python.org] On Behalf Of rail shafigulin
Sent: Friday, December 09, 2011 4:15 PM
To: tutor at python.org
Subject: Re: [Tutor] attribute overwrite
On Fri, Dec 9, 2011 at 4:43 PM, rail shafigulin <rail.shafigulin at gmail.com> wrote:
i need to overwrite and attribute from the inherited class. i also need to run the constructor of the super class. here is the code
import datetime
class DateTime(datetime.datetime):
def __init__(self, year, month, day, *args):
super().__init__(year, month, day, *args)
if self.year >= 1000:
self.year = self.year % 1000
i'm getting the following error:
AttributeError: attribute 'year' of datetime.datetime objects are not writable.
some of you might suggest to change
self.year = self.year % 1000
to
self.yr = self.year % 1000
but i'd need to keep the name the same.
any help is appreciated.
my apologies, but there is a minor mistake in the code:
import datetime
class DateTime(datetime.datetime):
def __init__(self, year, month, day, *args):
super().__init__()
if self.year >= 1000:
self.year = self.year % 1000
def main():
mytme = DateTime.now()
if __name__ == '__main__'
main()
This email is confidential and subject to important disclaimers and
conditions including on offers for the purchase or sale of
securities, accuracy and completeness of information, viruses,
confidentiality, legal privilege, and legal entity disclaimers,
available at http://www.jpmorgan.com/pages/disclosures/email.
More information about the Tutor
mailing list