در این تمرین باید کلاسی به نام `Chain` طراحی کنید به طوری که رفتارهای زیر را داشته باشد:
## جمع زنجیرهای اعداد
وقتی یک یا چند عدد (چه صحیح چه اعشاری) به صورت زنجیروار به عنوان پارامتر به کلاس ارسال میشوند، خروجی باید یک عدد حاصل جمع اعداد ورودی باشد. همچنین خود اشیا باید با مقدار خروجی برابر باشند.
```python terminal terminal
>>> Chain(2.5)(2)(2)(2.5) # sum
9
>>> Chain(3)(1.5)(2)(3) # sum
9.5
>>> Chain(64) == 64
True
```
## الحاق زنجیرهای رشتهها
وقتی یک یا چند رشته به صورت زنجیروار به عنوان پارامتر به کلاس ارسال میشوند، خروجی باید یک رشته حاصل الحاق رشتههای ورودی با یک کاراکتر فاصله (بهعنوان جدا کننده) باشد. همچنین خود اشیا باید با مقدار خروجی برابر باشند.
```python terminal terminal
>>> Chain('Ali')('Safinal')('is')('the')('best.') # concat with space
'Ali Safinal is the best.'
>>> Chain('abc')('defg') == 'abc defg'
True
```
## حالتهای دیگر
در دو حالت زیر باید یک Exception با پیغام `invalid operation` پرتاب شود:
1. یک یا چند رشته و عدد، همزمان به صورت زنجیروار به عنوان پارامتر به کلاس ارسال میشوند.
2. هر پارامتری که از جنس رشته یا عدد نباشد به کلاس ارسال شود.
```python terminal terminal
>>> Chain('Ali')(5) # raising exception with the following message
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
Exception: invalid operation
>>> Chain(9)([1, 2]) # raising exception with the following message
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
Exception: invalid operation
```
حال از شما خواسته شده تا کلاس `Chain` را تکمیل کنید.
```python chain.py
class Chain:
pass
```
## نکات
+ میتوانید فایل اولیه این سوال را از [این لینک](/problemset/assignments/4367/download_problem_initial_project/129729/) دریافت کنید.
+ شما میتوانید با پیادهسازی این سوال به صورت بخشبخش نمره بگیرید.
+ در صورت تمایل، میتوانید علاوهبر کلاس `Chain`، کلاسها و تابعهای کمکی دیگری نیز در فایل `chain.py` پیادهسازی کنید.
## نحوه ارسال
شما باید کلاس `Chain` موجود در فایل `chain.py` را تکمیل و سپس این فایل را ارسال کنید.