【问题标题】:Python Class - How do I create a class that accepts undefined number of arguments?Python 类 - 如何创建一个接受未定义数量参数的类?
【发布时间】:2015-01-22 21:25:39
【问题描述】:

我是初学者。为了学习,我必须在 python 中编写一个类,它最多接受 3 个不同的参数(a,b,c):类似于

 class random(object):

     def __init__(self,a,b,c):
          blah blah blah

如何做到这一点:

  • 如果没有输入参数,它只做一件事。

    例如:

    “test=random()”,在这种情况下假设 a=b=c=0

  • 如果输入一个参数,它会做另一件事。

    例如:

    "test=random(2)", in this case a=2 ,b=c=0, 
     and then run some case specific codes/instrutctions
    
  • 等等

类似于内置函数/类“范围”,您可以在其中使用

范围(9) 范围(3,9) 范围(3,9,2)

如果你知道我的意思。

谢谢

【问题讨论】:

    标签: python class variables arguments init


    【解决方案1】:

    您似乎在询问Default Argument Values

    定义函数或方法时,使参数可选的一种方法是给它们默认值:

     def __init__(self, a=0, b=0, c=0):
    

    现在,如果我在不带参数的情况下调用您的函数(或者,在 __init__ 函数的情况下,构造您的类的实例),abc 都将为 0 . 如果我传递 1 个参数,bc 将为 0。以此类推。

    请参阅Arbitrary Argument Lists 了解另一种类似的方法。


    range 的工作方式有点古怪,因为如果只有 1 个参数与 2 个或更多参数,则第一个参数具有不同的含义。还有一些其他类似的内置函数,但你模拟它们不是一个好主意;这些基本上只是出于向后兼容性的原因(直到 Python 没有关键字的日子)。

    为了让事情变得更有趣,因为0startstop 的完全有效值,甚至None 也是如此,你必须构造一些没有人可以合理地传递给你的特殊值。 (这部分,你可能真的需要在某一天效仿。)所以,它看起来像这样:

    class range(object):
        _sentinel = object()
        def __init__(self, start_or_stop, stop=range._sentinel, step=None):
            if stop is range._sentinel:
                start, stop = None, start_or_stop
            else:
                start = start_or_stop
            # Now you can use start, stop, step
    

    【讨论】:

      猜你喜欢
      • 2022-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-26
      相关资源
      最近更新 更多