This answer清楚而简明地解释了如何在类中使用__getitem__
方法来实现对self[key]
的评估。我想知道如何在一个类中创建一个方法,该类在pandas loc
类中使用像iloc
和DataFrame
这样的括号。
Pandas中的索引器方法似乎是defined as classes themselves。然而,看看DataFrame
课程,我不清楚如何调用它们。因此,如果我有自己的类,并且我想创建一个使用括号的方法,我将如何实现它?
基于user803422的建议,我已经设置了以下简单的代码,它似乎正在起作用:
class B:
def __init__(self, a):
self.a = a
def __getitem__(self, value):
return self.a[-value]
class A:
def __init__(self, lst):
self.lst = lst
def __getitem__(self, value):
return self.lst[value]
b = B(lst)
x = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
a = A(x)
print(a[2])
print(a.b[2])
返回:
>>> c
>>> f
这是正确的方法吗?
那这个呢?
class A:
def __getitem__(self, key):
print("__getitem__: %s, value=%s" % (type(key), str(key)))
a=A()
a[2]
a[2,5]
a['a':'f']
a['a':'f', 56]
输出是:
__getitem__: <type 'int'>, value=2
__getitem__: <type 'tuple'>, value=(2, 5)
__getitem__: <type 'slice'>, value=slice('a', 'f', None)
__getitem__: <type 'tuple'>, value=(slice('a', 'f', None), 56)
编辑(澄清原始问题后):
您必须按如下方式移动b = B(lst)
线:
class A:
def __init__(self, lst):
self.lst = lst
self.b = B(lst)
def __getitem__(self, value):
return self.lst[value]