【问题标题】:What method is called when using an indexed reference from an instance of a class? [duplicate]使用类实例的索引引用时调用什么方法? [复制]
【发布时间】:2020-04-20 17:50:01
【问题描述】:

我在 Raspbian 上使用 Python 3.7。我是 Python 新手,所以请多多包涵……

example program中,导入了一个模块from adafruit_ht16k33 import segments

segments.py 中定义了一个类: class Seg14x4(HT16K33):

在下面,我使用的类是继承的:class Seg7x4(Seg14x4):

在这些类的example program 中,对象display 是从此类实例化的:display = segments.Seg7x4(i2c)

Seg14x4 类有一个方法print,在示例程序中使用如下:display.print(42)

我理解这种 object.method(parameter) 类型的语法。 我可以在 Seg14x4 类中找到 print 方法的定义:def print(self, value):

但是,我使用的示例程序还显示了使用如下索引语法调用的类:display[3] = 'B'

我试图了解使用 display[3] = 'B' 语法时调用的方法。我在类定义中看不到“默认方法”之类的东西。 (尽管这可能不是 Python 的正确术语)。我阅读了 docs.python.org/3.3/tutorial/classes.html 并没有看到任何括号、索引语法的示例。 在确定要执行的方法方面,该类如何处理像 display[6] 这样的索引参数?

【问题讨论】:

    标签: python class


    【解决方案1】:
    display[x] = y
    

    ...变成...

    display.__setitem__(x, y)
    

    同样,

    display[x]
    

    ...变成...

    display.__getitem__(x)
    

    您可以找到这些“特殊方法”名称的列表here。通过在您的类中实现这些特殊方法,您可以使您的自定义对象的行为更像本机 python 对象,可以使用运算符和语法(如索引)进行操作。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-09
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多