14,838,477 members
1.00/5 (1 vote)
See more:
```import math

class TwoDObject:
def __init__(self,x=0,y=0):
self.x = x
self.y = y
def area(self):
return 0
def move(self,xchange=0,ychange=0):
self.x = self.x + xchange
self.y = self.y + ychange

class Circle(TwoDObject):
super().__init__(**kwargs)
def area(self):
def size_change(self,percent:float):

class Sector(Circle):
def __init__(self,angle:float=180,**kwargs):
self.angle = angle
super().__init__(**kwargs)
def area(self):
return super().area() * self.angle/360

class Rectangle(TwoDObject):
def __init__(self,height:float=1,width:float=1,**kwargs):
self.width = width
self.height = height
super().__init__(**kwargs)
def area(self):
return self.width * self.height
def size_change(self,percent:float):
self.width = self.width * (percent/100)
self.height = self.height * (percent/100)

if __name__ == "__main__":
c  =  Circle(5,11,22)
r = Rectangle(100,100,20,20)
print(c.x,c.y)```

What I have tried:

`the code throws an error that there are more arguments for Circle objject,but actually the circle class take 3 parameters but in fact exactly 3 arguments to the c objcect are given `

the type error :
```Traceback (most recent call last):
File "2tsal.py", line 46, in <module>
c  =  Circle(5,11,22)
TypeError: __init__() takes from 1 to 2 positional arguments but 4 were given```
Posted
Updated 7-Jul-20 21:31pm
Luc Pattyn 7-Jul-20 22:38pm

Hi,

I don't speak Python, but my Google foo is OK.
I was able to find this example which looks rather similar to your code.

There are some differences in parameter handling: they don't have any **kwargs (I don't understand what that is doing in your code), and the __init__ of derived classes calls super().__init__(...) which seems quite logical.

Hope this helps.

without **kwargs you have to modify the subclasses whenever u add parameters to your superclass.
but with **kwargs every subclass doesnt have to care about the inherited attributes ,rather it cares only about its own attributes.

## Solution 1

You declare your Circle constructor as
Python
`def __init__(self,angle:float=180,**kwargs):`

but then try to pass values instead of keyword pairs. You need to call it by:
Python
`Circle(5,x=11,y=22)`

And the same with your Rectangle. Although with so few parameters it hardly seems worth the overhead.

See 4. More Control Flow Tools — Python 3.7.8 documentation[^].
Maciej Los 8-Jul-20 3:52am

5ed!
Richard MacCutchan 8-Jul-20 4:13am

Thanks again, Maciej. The ability to read the documentation gets me more and more points. :)
Luc Pattyn 8-Jul-20 10:00am

+5
Richard MacCutchan 8-Jul-20 10:05am

Thanks Luc. If only all newbies would make use of the official online tutorials, instead of trying to learn the language through YouTube.
Luc Pattyn 8-Jul-20 10:17am

What do you mean by "YouTube"?
Oh, is that the teen version of "TikTok"?

Actually a parrot clip would fit well on the page you referred to...