Repository: modin-project/modin

Issue:
BUG: dataframe.attrs is None by default
### Modin version checks

- [X] I have checked that this issue has not already been reported.

- [X] I have confirmed this bug exists on the latest released version of Modin.

- [X] I have confirmed this bug exists on the main branch of Modin. (In order to do this you can follow [this guide](https://modin.readthedocs.io/en/stable/getting_started/installation.html#installing-from-the-github-master-branch).)


### Reproducible Example

```python
import modin.pandas as pd
import pandas
mdf = pd.DataFrame()
df = pandas.DataFrame()
print(f'pandas: {df.attrs}, modin: {mdf.attrs}')

>> pandas: {}, modin: None
```



### Issue Description

By default, pandas dataframe.attrs is an dictionary.   modin's is None.


### Expected Behavior

default for a modin.pandas dataframe should be an empty dictionary

### Error Logs

None

### Installed Versions

```
INSTALLED VERSIONS
------------------
commit           : efdfbac86dbe7a1b9028e3877e9f2bc7502b58cf
python           : 3.10.5.final.0
python-bits      : 64
OS               : Windows
OS-release       : 10
Version          : 10.0.19044
machine          : AMD64
processor        : AMD64 Family 23 Model 96 Stepping 1, AuthenticAMD
byteorder        : little
LC_ALL           : None
LANG             : en_US.UTF-8
LOCALE           : English_United States.1252

Modin dependencies
------------------
modin            : 0.15.0
ray              : 3.0.0.dev0
dask             : 2022.9.1
distributed      : None
omniscidbe       : None

pandas dependencies
-------------------
pandas           : 1.4.2
numpy            : 1.23.1
pytz             : 2022.1
dateutil         : 2.8.2
pip              : 22.2.2
setuptools       : 58.1.0
Cython           : None
pytest           : None
hypothesis       : None
sphinx           : None
blosc            : None
feather          : None
xlsxwriter       : None
lxml.etree       : 4.9.1
html5lib         : None
pymysql          : None
psycopg2         : None
jinja2           : 3.1.2
IPython          : 8.4.0
pandas_datareader: 0.10.0
bs4              : 4.11.1
bottleneck       : None
brotli           : None
fastparquet      : None
fsspec           : 2022.8.2
gcsfs            : None
markupsafe       : 2.1.1
matplotlib       : 3.5.2
numba            : None
numexpr          : None
odfpy            : None
openpyxl         : None
pandas_gbq       : None
pyarrow          : 9.0.0
pyreadstat       : None
pyxlsb           : None
s3fs             : None
scipy            : None
snappy           : None
sqlalchemy       : None
tables           : None
tabulate         : None
xarray           : None
xlrd             : 2.0.1
xlwt             : None
zstandard        : None
```


Discussion:
Thanks @msingh00 for reporting the issue!

I can reproduce it on current master. We'll look into it!

Resolving patch:
diff --git a/modin/pandas/dataframe.py b/modin/pandas/dataframe.py
--- a/modin/pandas/dataframe.py
+++ b/modin/pandas/dataframe.py
@@ -2623,7 +2623,7 @@ def __dataframe__(self, nan_as_null: bool = False, allow_copy: bool = True):
         )
 
     @property
-    def attrs(self):  # noqa: D200
+    def attrs(self):  # noqa: RT01, D200
         """
         Return dictionary of global attributes of this dataset.
         """
@@ -2631,7 +2631,7 @@ def attrs(self):  # noqa: D200
         def attrs(df):
             return df.attrs
 
-        self._default_to_pandas(attrs)
+        return self._default_to_pandas(attrs)
 
     @property
     def style(self):  # noqa: RT01, D200


Test patch:
diff --git a/modin/pandas/test/dataframe/test_default.py b/modin/pandas/test/dataframe/test_default.py
--- a/modin/pandas/test/dataframe/test_default.py
+++ b/modin/pandas/test/dataframe/test_default.py
@@ -1210,3 +1210,9 @@ def test_setattr_axes():
     # Check that ensure_index was called
     pandas.testing.assert_index_equal(df.index, pandas.Index(["foo", "bar"]))
     pandas.testing.assert_index_equal(df.columns, pandas.Index([9, 10]))
+
+
+@pytest.mark.parametrize("data", test_data_values, ids=test_data_keys)
+def test_attrs(data):
+    modin_df, pandas_df = create_test_dfs(data)
+    eval_general(modin_df, pandas_df, lambda df: df.attrs)