如何设计行为类似于根类的python类

陶瓷

编辑:

如回应中所述,此问题的搜索关键字是“ python中的赋值运算符重载”。

我想构造一个类,其行为类似于整数或字符串类。像这样的东西:

x = "hello"
x.upper() # says "HELLO"


y = MyClass()
y = 3
y = 5
print(y) # will print 5
y.previous_value() # will yield 3

我该如何建立一个像这样的类?

编辑:

目前最接近的黑客是这样的:https : //stackoverflow.com/a/6012807/1952991

轻量级

您无法实现此目的:

y = MyClass()
y = 3
y = 5
y.previous_value() # will yield 3

Python中的分配将名称重新绑定到另一个对象。这样做时y = 3y现在是整数3的名称,而不是的实例的名称MyClass此行为不依赖于旧RHS可言,而且不能被它而不拦截魔术(你能可能做上下文管理器的东西)。MyClass曾经用来引用的y实例不知道y不再引用它(或者它一开始就引用);即使这样做,y.previous_value()也会在int而不是MyClass实例上调用方法

您能做的最接近的是__setitem__当您执行以下操作时,这是Python调用的钩子:

x = [1, 2, 3]
x[2] = 5

第二行翻译为x.__setitem__(2, 5)使用此功能,您可以玩以下有趣的游戏:

class MyClass:
    def __init__(self):
        self.values = []

    def __setitem__(self, item, value):
        self.value.append(value)

    def previousvalue(self):
        return self.values[-2]

    def __str__(self):
        return str(self.values[-1])

x = MyClass()
x[:] = 5
x[:] = 6
print(x.previousvalue())

请注意,您需要[]到触发__setitem__,它需要有一个价值-它可以是任何对象,因为它被忽略,所以我用一个空切片。您需要跳过这样的句法箍圈这一事实应该是您应该重新考虑为什么要这样做的一个重要指标-几乎可以肯定,有一种更好的方法可以实现您的目标。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

类变量的行为类似于实例变量(Python 3.4)

来自分类Dev

python类的行为类似于字典或列表数据

来自分类Dev

如何制作行为类似于select Form元素的dropdown-menu和dropdown-toggle类

来自分类Dev

如何使不是其抽象类的子类的接口实现者的行为类似于该接口的抽象类?

来自分类Dev

创建行为类似于stringstream的类的最简单方法

来自分类Dev

std :: function类似于委托模板类

来自分类Dev

类似于存折的下拉视图类

来自分类Dev

类似于类型列表(?)的模板类

来自分类Dev

Java。创建类似于List的新类

来自分类Dev

类似于Java Duration的类的长度?

来自分类Dev

类似于Java Delphi的类引用

来自分类Dev

我是否必须重载每个运算符才能使类的行为类似于其成员变量之一?

来自分类Dev

我是否必须重载每个运算符,才能使类的行为类似于其成员变量之一?

来自分类Dev

如何在julia中创建行为类似于具有公共/私有字段和方法的标准Java类的“单一分发,面向对象的类”

来自分类Dev

C ++:如何专门针对类似于数组数组的类A的成员函数来处理A <A <T>>?

来自分类Dev

xdotool:如何通过标题和具有不同模式的类搜索窗口(类似于AutoHotkey)

来自分类Dev

如何在Scala中正确实现自定义的类似于数字的类?

来自分类Dev

为什么Python类变量的作用类似于静态变量?

来自分类Dev

您可以在类主体中使用未实现的Java方法(类似于python pass)吗?

来自分类Dev

Python继承类行为

来自分类Dev

是否存在类似于.net SortedList或SortedCollection的Perl类或结构?

来自分类Dev

Ruby类变量是否类似于Java静态变量?

来自分类Dev

Java初始化类的样式类似于C#

来自分类Dev

自己类的类似于C#数组的构造函数

来自分类Dev

类中的类似于std :: map或std :: vector的构造方法

来自分类Dev

类似于关系数据库的模型的类或结构?

来自分类Dev

类的类似于JQuery的编程快捷方式

来自分类Dev

创建类似于我自己的类中的延迟的方法

来自分类Dev

在 Matlab 中隐藏类类似于私有函数

Related 相关文章

  1. 1

    类变量的行为类似于实例变量(Python 3.4)

  2. 2

    python类的行为类似于字典或列表数据

  3. 3

    如何制作行为类似于select Form元素的dropdown-menu和dropdown-toggle类

  4. 4

    如何使不是其抽象类的子类的接口实现者的行为类似于该接口的抽象类?

  5. 5

    创建行为类似于stringstream的类的最简单方法

  6. 6

    std :: function类似于委托模板类

  7. 7

    类似于存折的下拉视图类

  8. 8

    类似于类型列表(?)的模板类

  9. 9

    Java。创建类似于List的新类

  10. 10

    类似于Java Duration的类的长度?

  11. 11

    类似于Java Delphi的类引用

  12. 12

    我是否必须重载每个运算符才能使类的行为类似于其成员变量之一?

  13. 13

    我是否必须重载每个运算符,才能使类的行为类似于其成员变量之一?

  14. 14

    如何在julia中创建行为类似于具有公共/私有字段和方法的标准Java类的“单一分发,面向对象的类”

  15. 15

    C ++:如何专门针对类似于数组数组的类A的成员函数来处理A <A <T>>?

  16. 16

    xdotool:如何通过标题和具有不同模式的类搜索窗口(类似于AutoHotkey)

  17. 17

    如何在Scala中正确实现自定义的类似于数字的类?

  18. 18

    为什么Python类变量的作用类似于静态变量?

  19. 19

    您可以在类主体中使用未实现的Java方法(类似于python pass)吗?

  20. 20

    Python继承类行为

  21. 21

    是否存在类似于.net SortedList或SortedCollection的Perl类或结构?

  22. 22

    Ruby类变量是否类似于Java静态变量?

  23. 23

    Java初始化类的样式类似于C#

  24. 24

    自己类的类似于C#数组的构造函数

  25. 25

    类中的类似于std :: map或std :: vector的构造方法

  26. 26

    类似于关系数据库的模型的类或结构?

  27. 27

    类的类似于JQuery的编程快捷方式

  28. 28

    创建类似于我自己的类中的延迟的方法

  29. 29

    在 Matlab 中隐藏类类似于私有函数

热门标签

归档