gpt4 book ai didi

python - 如何在Python中使用方括号的类中实现方法(如pandas DataFrame中的loc)?

转载 作者:行者123 更新时间:2023-12-01 08:12:42 24 4
gpt4 key购买 nike

This answer清晰简洁地解释了如何使用 __getitem__类中的方法来实现 self[key] 的评估。我想知道如何在类中创建一个使用像 loc 这样的括号的方法iloc在 Pandas 中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

这是正确的方法吗?

最佳答案

user803422 的答案没有问题,但是 pandas DataFrames 中的 loc 是作为属性实现的(参见 loc documentation ),或多或少像这样:

class A:
def __init__(self, lst):
self.lst = lst
def __getitem__(self, value):
return self.lst[value]
@property
def b(self):
return B(self)

class B:
def __init__(self, a):
self.a = a
def __getitem__(self, value):
return self.a[-value]

附注:

正如 Icvriend 在注释中指出的那样,在我的示例中,每次调用 b 方法时都会创建一个新的索引器对象 B。而在 user803422 代码中,索引是在开头生成的。如果实例化后更改第一个属性,这可能会很麻烦。请参阅下面的两个示例。

>>> # edd313
>>> x = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> a = A(x)
>>> a.lst = [1, 2, 3]
>>> print(a.b[2])
2
>>> # user803422
>>> x = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> a = A(x)
>>> a.lst = [1, 2, 3]
>>> print(a.b[2])
f

关于python - 如何在Python中使用方括号的类中实现方法(如pandas DataFrame中的loc)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55142167/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com