代码之家  ›  专栏  ›  技术社区  ›  James Schinner

Python:测试描述符分配正确

  •  2
  • James Schinner  · 技术社区  · 7 年前

    考虑到这个例子:

    >>> class Bar(object):
    ...     
    ...     def __init__(self, name):
    ...         self.name = name
    ...     def __set__(self, instance, value):
    ...         setattr(instance, self.name, value)
    ...     def __get__(self, instance, owner):
    ...         return getattr(instance, self.name, owner)
    ...     
    >>> class Foo(object):
    ...     bat = Bar('bat')
    ...     
    >>> Foo.bat
    <class 'Foo'>
    >>> type(Foo.bat)
    <class 'type'>  # how would you get <class 'Bar'> ?
    

    我想写一些 pytests 断言正确的描述符已分配给正确的属性。

    2 回复  |  直到 7 年前
        1
  •  2
  •   Carson Cook    7 年前

    我不确定您想用描述符做什么,但通常您希望在未传递实例时传回描述符本身:

    class Bar(object):
        def __init__(self, name):
            self.name = name
        def __set__(self, obj, value):
            setattr(obj, self.name, value)
        def __get__(self, obj, cls):
            if obj is None:
                return self
            return getattr(obj, self.name)
    
    class Foo(object):
        bat = Bar('bat')
    
    Foo.bat
    # <__main__.Bar at 0x7f202accbf50>
    
        2
  •  2
  •   Davis Herring    7 年前

    您可以覆盖通常的查找(它使用您试图查看的描述符,无论您是否调用 type 关于结果) vars(Foo)['bat']