代码之家  ›  专栏  ›  技术社区  ›  Austin Richardson

python使用getitem作为方法

  •  3
  • Austin Richardson  · 技术社区  · 14 年前

    Class MyClass:
        @property
        def function(self):
            def __getitem__():
                ...
    

    所以我可以

    A = MyClass()
    A.function[5]
    A.function[-1]
    
    3 回复  |  直到 14 年前
        1
  •  4
  •   eruciform    14 年前

    一切都是python中的一级对象,所以这个想法应该是可行的(语法是关闭的),尽管我建议 function 它自己的类中有属性,然后在MyClass中使用它,除非您有很好的数据隐藏理由不这样做。。。

    我想指出的是,我假设你想 功能

    例如,一个可订阅的东西(你可以只做一个 list ,也是):

    # python
    
    > class FooFunc(list):
    >   pass
    > class Foo:
    >   foofunc = FooFunc()
    > f = Foo()
    > f.foofunc.append("bar")
    > f.foofunc[0]
    'bar'
    
        2
  •  1
  •   McJeff    14 年前

    不,那不行。请考虑在访问已修饰为@property的属性时调用的底层描述符逻辑。get方法需要返回一个将用作computed属性的值 function . 在这种情况下,函数不返回任何内容(属性的隐式None值)。然后您的订阅将尝试索引 None

    你可以从 __getitem__ 不过,邓德方法。这在句法上“起作用”是一样的。

        3
  •  0
  •   Ned Batchelder    14 年前

    如果您尝试您的代码(在类中修复C之后),您将看到它产生一个错误:“TypeError:'NoneType'object is unsubscriptable”。

    我认为最好的办法是创建一个具有 __getitem__ ,并设置 function 类的实例。为什么要这么复杂?