Connecting Tech Pros Worldwide Forums | Help | Site Map

Why can't I subclass off of "date" ?

davidfinance@gmail.com
Guest
 
Posts: n/a
#1: Aug 24 '06
Ok, maybe this is a stupid question, but why can't I make a subclass of
datetime.date and override the __init__ method?

---

from datetime import date

class A(date):
def __init__(self, a, b, c, d):
print a, b, c, d
date.__init__(self, 2006, 12, 11)

d = A(1, 2, 3, 4)

---

$ python break_date.py
Traceback (most recent call last):
File "break_date.py", line 9, in ?
d = A(1, 2, 3, 4)
TypeError: function takes exactly 3 arguments (4 given)


If I make A a subclass of some toy class that is constructed with three
arguments, it works fine. Why can't I make "date" the subclass?

Thanks for any advice.

David

Georg Brandl
Guest
 
Posts: n/a
#2: Aug 24 '06

re: Why can't I subclass off of "date" ?


davidfinance@gmail.com wrote:
Quote:
Ok, maybe this is a stupid question, but why can't I make a subclass of
datetime.date and override the __init__ method?
>
---
>
from datetime import date
>
class A(date):
def __init__(self, a, b, c, d):
print a, b, c, d
date.__init__(self, 2006, 12, 11)
>
d = A(1, 2, 3, 4)
>
---
>
$ python break_date.py
Traceback (most recent call last):
File "break_date.py", line 9, in ?
d = A(1, 2, 3, 4)
TypeError: function takes exactly 3 arguments (4 given)
>
>
If I make A a subclass of some toy class that is constructed with three
arguments, it works fine. Why can't I make "date" the subclass?
You'll have to also override the __new__ method.

Georg
Fredrik Lundh
Guest
 
Posts: n/a
#3: Aug 24 '06

re: Why can't I subclass off of "date" ?


davidfinance@gmail.com wrote:
Quote:
Ok, maybe this is a stupid question, but why can't I make a subclass of
datetime.date and override the __init__ method?
__init__ controls initialization of an already constructed object. to
control construction, you need to override __new__:

http://pyref.infogami.com/__new__

e.g.

class A(date):
def __new__(cls, a, b, c, d):
print a, b, c, d
return super(A, cls).__new__(cls, 2006, 12, 11)

</F>

davidfinance@gmail.com
Guest
 
Posts: n/a
#4: Aug 24 '06

re: Why can't I subclass off of "date" ?


Wow, you guys are fast.

Thanks Georg and Fredrik!!

Fredrik Lundh wrote:
Quote:
davidfinance@gmail.com wrote:
>
Quote:
Ok, maybe this is a stupid question, but why can't I make a subclass of
datetime.date and override the __init__ method?
>
__init__ controls initialization of an already constructed object. to
control construction, you need to override __new__:
>
http://pyref.infogami.com/__new__
>
e.g.
>
class A(date):
def __new__(cls, a, b, c, d):
print a, b, c, d
return super(A, cls).__new__(cls, 2006, 12, 11)
>
</F>
Closed Thread