class_docstr_tok: []
code: def __get__(
      self, obj: HasProps | None, owner: type[HasProps] | None
  ) -> T:
      if obj is not None:
          return getattr(obj, self.aliased_name)
      elif owner is not None:
          return self
  
      # This should really never happen. If it does, __get__ was called in a bad way.
      raise ValueError(
          "both 'obj' and 'owner' are None, don't know what to do"
      )
  
imports: from __future__ import annotations
  import logging
  from copy import copy
  from types import FunctionType
  from typing import TYPE_CHECKING, Any, Callable, Generic, TypeVar
  from ...util.deprecation import deprecated
  from .singletons import Undefined
  from .wrappers import PropertyValueColumnData, PropertyValueContainer
label_desc: Use image node_id 3 for calling the AliasPropertyDescriptor obj's underlying member method code with example usage: obj.__get__(obj, owner) and returns: getattr, self