code: def test___get__improper(self) -> None:
      f = Foo()
      d = bcpd.PropertyDescriptor("foo", f)
      with pytest.raises(ValueError) as e:
          d.__get__(None, None)
      assert str(e.value).endswith(
          "both 'obj' and 'owner' are None, don't know what to do"
      )
  
imports: from __future__ import annotations
  import pytest
  import typing
  from unittest.mock import ANY, MagicMock, call, patch
  from bokeh.core.properties import Alias, DeprecatedAlias, Int, List, Nullable
  from bokeh.model import Model
  from bokeh.util.warnings import BokehDeprecationWarning
  from tests.support.util.api import verify_all
  import bokeh.core.property.descriptors
label_desc: Use image node_id 4 for calling the Test_PropertyDescriptor obj's underlying member method code with example usage: obj.test___get__improper() without return types