Python类条件:从x输入获取[x,x]输出?

Python类条件:从x输入获取[x,x]输出?,python,Python,我正在用Python进行一些区间计算。这是我所写内容的摘录。我想包括退化区间,即实数1的区间为[1,1] 因此,当我键入Interval(1)时,我希望返回[1,1]。但是我已经用两个参数定义了我的区间类 我无法生成子类-它仍然需要两个参数。谁能给我指一下正确的方向吗?我可以在某种意义上扩展_包含_吗 TLDR:如何从x输入中获得[x,x]输出 from numpy import * import numpy as np from pylab import * class Interval:

我正在用Python进行一些区间计算。这是我所写内容的摘录。我想包括退化区间,即实数1的区间为[1,1]

因此,当我键入Interval(1)时,我希望返回[1,1]。但是我已经用两个参数定义了我的区间类

我无法生成子类-它仍然需要两个参数。谁能给我指一下正确的方向吗?我可以在某种意义上扩展_包含_吗

TLDR:如何从x输入中获得[x,x]输出

from numpy import *
import numpy as np
from pylab import *

class Interval:
    def __init__(self, LeftEndpoint, RightEndpoint):
        self.min = LeftEndpoint
        self.max = RightEndpoint
        if LeftEndpoint > RightEndpoint:
            raise ValueError('LeftEndpoint must not be greater than RightEndpoint') 

    def __repr__(self): #TASK 3
        return '[{},{}]'.format(self.min,self.max)

    def __contains__(self, num):
        if num < self.min:
            raise Exception('The number is not in the given interval')
        if num > self.max:
            raise Exception('The number is not in the given interval')

p = Interval(1,2)
print(p) #returns [1,2]
从numpy导入*
将numpy作为np导入
从派拉布进口*
上课时间:
def uuu init uuuu(self、LeftEndpoint、righEndpoint):
self.min=LeftEndpoint
self.max=RightEndpoint
如果LeftEndpoint>RightEndpoint:
raise ValueError('LeftEndpoint不能大于RightEndpoint')
定义报告(自我):#任务3
返回'[{},{}]'.format(self.min,self.max)
def___;包含___;(self,num):
如果numself.max:
引发异常('该数字不在给定的间隔内')
p=间隔(1,2)
打印(p)#返回[1,2]

只需给
RightEndpoint
一个默认值,比如
None
;如果函数中仍为
None
,则您知道没有为其分配值,因此可以将其设置为与
LeftEndpoint
相同的值:

def __init__(self, LeftEndpoint, RightEndpoint=None):
    if RightEndpoint is None:
        RightEndpoint = LeftEndpoint
注意:如果遵循,则参数和局部变量名称应全部为小写字母,并带有下划线。而
\uuuu contains\uuuu
方法应该真正返回
True
False
,而不是引发异常:

class Interval:
    def __init__(self, left, right=None):
        if right is None:
            right = left
        if left > right:
            raise ValueError(
                'left must not be greater than right')
        self.left = left
        self.right = right

    def __repr__(self):
        return f'[{self.left}, {self.right}]'

    def __contains__(self, num):
        return self.left <= num <= self.right

您可以使用
*args
传入数量可变的参数,然后动态分配
RightEndpoint

def __init__(self, *args):
        self.min = args[0]
        if len(args) < 2:
            RightEndpoint = args[0]
        elif len(args) == 2:
            RightEndpoint = args[1]
        else:
            # decide what to do with more than 2 inputs
        self.max = RightEndpoint
        #...


p = Interval(1,2)
print(p) #returns [1,2]
p1 = Interval(1) 
print(p1) #returns [1,1]
def\uuuu初始化(self,*args):
self.min=args[0]
如果len(args)<2:
RightEndpoint=args[0]
elif len(args)=2:
RightEndpoint=args[1]
其他:
#决定如何处理2个以上的输入
self.max=RightEndpoint
#...
p=间隔(1,2)
打印(p)#返回[1,2]
p1=间隔(1)
打印(p1)#返回[1,1]

(如果您想使用关键字参数,也可以使用
**kwargs

谢谢!我都试过了,只是一开始我没有把它设为零。回答得很好,再次感谢。仅当您需要支持任意数量的值时才使用它。对于一两个人来说,这太过分了,现在需要你处理
len(args)>2
,这在这里没有意义。感谢Martijn Pieters的评论-我想我只是对在我自己的代码中使用默认参数有所警惕,因为当我不被迫调用它们时,我很容易忘记它们。因此,我宁愿使用一个变量集,在这里我考虑类/函数中可能的输入,或者显式地指定参数,而不是依赖于默认值。在这个角度上你能给出什么建议吗?那就找一个更好的编辑器,一个理解Python代码的编辑器,在自动完成或检查代码时向你显示参数。使用
*args
会使这些工具更难帮助您分析代码。
def __init__(self, *args):
        self.min = args[0]
        if len(args) < 2:
            RightEndpoint = args[0]
        elif len(args) == 2:
            RightEndpoint = args[1]
        else:
            # decide what to do with more than 2 inputs
        self.max = RightEndpoint
        #...


p = Interval(1,2)
print(p) #returns [1,2]
p1 = Interval(1) 
print(p1) #returns [1,1]