Python 类实例中的条件方法执行
我想创建能够优雅地处理数学错误的monad。我创造了这样的东西:Python 类实例中的条件方法执行,python,functional-programming,monads,Python,Functional Programming,Monads,我想创建能够优雅地处理数学错误的monad。我创造了这样的东西: from enum import Enum class Monad(Enum): Safe = 1 Fail = 2 class DivisionMonad: def __init__(self, value=None, type=Monad.Safe): self.value = value self.type = type def __truediv__(s
from enum import Enum
class Monad(Enum):
Safe = 1
Fail = 2
class DivisionMonad:
def __init__(self, value=None, type=Monad.Safe):
self.value = value
self.type = type
def __truediv__(self, val):
if self.type == Monad.Fail:
return DivisionMonad(type=Monad.Fail)
try:
return DivisionMonad(self.value / val)
except:
return DivisionMonad(type=Monad.Fail)
def __repr__(self):
return f'< {self.value} >'
d = DivisionMonad(1)
d = d / 3
print(d.value)
print(d.type)
d = d / 0
print(d.value)
print(d.type)
从枚举导入枚举
类单子(枚举):
安全=1
失败=2
类别:单子:
def uuu init uuuu(self,value=None,type=Monad.Safe):
自我价值=价值
self.type=type
def _uTrueDiv _;(自,val):
如果self.type==Monad.Fail:
返回Monad(type=Monad.Fail)
尝试:
返回分区monad(self.value/val)
除:
返回Monad(type=Monad.Fail)
定义报告(自我):
返回f'<{self.value}>'
d=d(1)
d=d/3
打印(d值)
打印(d.type)
d=d/0
打印(d值)
打印(d.type)
但我相信,通过让类根据Monad的状态使用不同的方法,这可能会更简单。除了
if/else
语句之外,是否有一种方法可以基于实例
属性创建有条件的
方法执行?这不是monad。它只是一个完成了一项任务的类,monads可以用来完成这项任务。这是一个公平的观点,我只是试图模仿这种行为。至少,\uuuuuu truediv\uuuu
仍然应该返回一个DivisionMonad
,而不管其参数的状态如何。这是一个很好的观点,我将更新houldDivisionMonad
实例是否更改其自身的状态?如果是,您可以使用。否则最好用不同的行为编写两个不同的类。这不是monad。它只是一个完成了一项任务的类,monads可以用来完成这项任务。这是一个公平的观点,我只是试图模仿这种行为。至少,\uuuuuu truediv\uuuu
仍然应该返回一个DivisionMonad
,而不管其参数的状态如何。这是一个很好的观点,我将更新houldDivisionMonad
实例是否更改其自身的状态?如果是,您可以使用。否则,最好编写两个具有不同行为的不同类。