Repository: PrefectHQ/prefect

Issue:
Using self.description when subclassing Task causes ValueError
## Description
I believe this is probably somewhat related to #1212.

When inheriting from Task, if your subclass defines a `description` attribute, the following error is produced when creating and registering a flow with cloud:

```
ValueError: Flow could not be deserialized successfully. Error was: TypeError("__init__() got an unexpected keyword argument 'description'")
```
The full traceback is at the bottom of this issue.

## Expected Behavior

The attribute would be ignored as it's not a reserved attribute for the Task [class](https://github.com/PrefectHQ/prefect/blob/4d8337f75fe9bbb3024faa3b74a8f7debbb596d0/src/prefect/core/task.py#L182).


## Reproduction

```python
from prefect import Task, Flow

class MyTask(Task):
    def __init__(self):
        super().__init__()
        self.name = "NameOfTask"
        self.description = "This is the description"

    def run(self):
        return "All done!"

tsk = MyTask()

flow = Flow("my-flow", tasks=[tsk])

flow.register(project_name="project_name")
```

## Workaround

Using another attribute name, e.g. `my_description`, avoids the error.

## Environment
```json
{
  "config_overrides": {
    "cloud": {
      "agent": {
        "auth_token": true
      }
    }
  },
  "env_vars": [],
  "system_information": {
    "platform": "Linux-5.4.0-58-generic-x86_64-with-glibc2.27",
    "prefect_backend": "cloud",
    "prefect_version": "0.14.1",
    "python_version": "3.8.7"
  }
}
```

## Full Traceback
```bash
$ /data/my-example/.venv/bin/python3.8 /data/my-example/bin/my_example.py
Result check: OK
Traceback (most recent call last):
  File "/data/my-example/.venv/lib/python3.8/site-packages/prefect/client/client.py", line 799, in register
    prefect.serialization.flow.FlowSchema().load(serialized_flow)
  File "/data/my-example/.venv/lib/python3.8/site-packages/prefect/utilities/serialization.py", line 141, in load
    return super().load(data, **kwargs)
  File "/data/my-example/.venv/lib/python3.8/site-packages/marshmallow/schema.py", line 727, in load
    return self._do_load(
  File "/data/my-example/.venv/lib/python3.8/site-packages/marshmallow/schema.py", line 861, in _do_load
    result = self._deserialize(
  File "/data/my-example/.venv/lib/python3.8/site-packages/marshmallow/schema.py", line 669, in _deserialize
    value = self._call_and_store(
  File "/data/my-example/.venv/lib/python3.8/site-packages/marshmallow/schema.py", line 496, in _call_and_store
    value = getter_func(data)
  File "/data/my-example/.venv/lib/python3.8/site-packages/marshmallow/schema.py", line 666, in <lambda>
    getter = lambda val: field_obj.deserialize(
  File "/data/my-example/.venv/lib/python3.8/site-packages/marshmallow/fields.py", line 356, in deserialize
    output = self._deserialize(value, attr, data, **kwargs)
  File "/data/my-example/.venv/lib/python3.8/site-packages/marshmallow/fields.py", line 611, in _deserialize
    return self._load(value, data, partial=partial)
  File "/data/my-example/.venv/lib/python3.8/site-packages/marshmallow/fields.py", line 594, in _load
    valid_data = self.schema.load(value, unknown=self.unknown, partial=partial)
  File "/data/my-example/.venv/lib/python3.8/site-packages/prefect/utilities/serialization.py", line 141, in load
    return super().load(data, **kwargs)
  File "/data/my-example/.venv/lib/python3.8/site-packages/marshmallow/schema.py", line 727, in load
    return self._do_load(
  File "/data/my-example/.venv/lib/python3.8/site-packages/marshmallow/schema.py", line 897, in _do_load
    result = self._invoke_load_processors(
  File "/data/my-example/.venv/lib/python3.8/site-packages/marshmallow/schema.py", line 1095, in _invoke_load_processors
    data = self._invoke_processors(
  File "/data/my-example/.venv/lib/python3.8/site-packages/marshmallow/schema.py", line 1222, in _invoke_processors
    data = [processor(item, many=many, **kwargs) for item in data]
  File "/data/my-example/.venv/lib/python3.8/site-packages/marshmallow/schema.py", line 1222, in <listcomp>
    data = [processor(item, many=many, **kwargs) for item in data]
  File "/data/my-example/.venv/lib/python3.8/site-packages/prefect/serialization/task.py", line 58, in create_object
    task = super().create_object(data)  # type: ignore
  File "/data/my-example/.venv/lib/python3.8/site-packages/prefect/utilities/serialization.py", line 164, in create_object
    return object_class(**init_data)
  File "/data/my-example/.venv/lib/python3.8/site-packages/prefect/core/task.py", line 157, in init
    old_init(self, *args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'description'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/data/my-example/bin/my_example.py", line 16, in <module>
    flow.register(project_name="project_name")
  File "/data/my-example/.venv/lib/python3.8/site-packages/prefect/core/flow.py", line 1665, in register
    registered_flow = client.register(
  File "/data/my-example/.venv/lib/python3.8/site-packages/prefect/client/client.py", line 801, in register
    raise ValueError(
ValueError: Flow could not be deserialized successfully. Error was: TypeError("__init__() got an unexpected keyword argument 'description'")
```


Discussion:
Thanks for the issue report, this is due to a lingering stale serializer definition - will push a fix up shortly.

Resolving patch:
diff --git a/src/prefect/serialization/task.py b/src/prefect/serialization/task.py
--- a/src/prefect/serialization/task.py
+++ b/src/prefect/serialization/task.py
@@ -71,7 +71,6 @@ class Meta:
     type = fields.Function(lambda task: to_qualified_name(type(task)), lambda x: x)
     name = fields.String(allow_none=True)
     slug = fields.String(allow_none=True)
-    description = fields.String(allow_none=True)
     tags = SortedList(fields.String())
     max_retries = fields.Integer(allow_none=True)
     retry_delay = fields.TimeDelta(allow_none=True)
@@ -123,6 +122,5 @@ class Meta:
     slug = fields.String(allow_none=True)
     default = JSONCompatible(allow_none=True)
     required = fields.Boolean(allow_none=True)
-    description = fields.String(allow_none=True)
     tags = SortedList(fields.String())
     outputs = fields.Method("load_outputs", allow_none=True)


Test patch: