P: n/a
|
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 | |
Share this Question
P: n/a
| da**********@gmail.com wrote:
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 | |
P: n/a
| da**********@gmail.com wrote:
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> | |
P: n/a
|
Wow, you guys are fast.
Thanks Georg and Fredrik!!
Fredrik Lundh wrote:
da**********@gmail.com wrote:
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>
| | This discussion thread is closed Replies have been disabled for this discussion. | | Question stats - viewed: 1224
- replies: 3
- date asked: Aug 24 '06
|