开局签到Python基础 2023-01-18 23:40 采纳率: 0%
浏览 28

python 自定义的参数问题

Python内置的slice
使用方法:
slice(stop)
slice(start, stop[, step])


# 双下__new__方法接受所有参数.
def __new__(*args, **kwargs): 
# 双下init仅接受一个参数.
def __init__(self, stop): 

是如何实现, 可以传递一个参数或三个参数的.
# slice可见的源码部分.
class slice(object):
    """
    slice(stop)
    slice(start, stop[, step])
    
    Create a slice object.  This is used for extended slicing (e.g. a[0:10:2]).
    """
    def indices(self, len): # real signature unknown; restored from __doc__
        """
        S.indices(len) -> (start, stop, stride)
        
        Assuming a sequence of length len, calculate the start and stop
        indices, and the stride length of the extended slice described by
        S. Out of bounds indices are clipped in a manner consistent with the
        handling of normal slices.
        """
        pass

    def __eq__(self, *args, **kwargs): # real signature unknown
        """ Return self==value. """
        pass

    def __getattribute__(self, *args, **kwargs): # real signature unknown
        """ Return getattr(self, name). """
        pass

    def __ge__(self, *args, **kwargs): # real signature unknown
        """ Return self>=value. """
        pass

    def __gt__(self, *args, **kwargs): # real signature unknown
        """ Return self>value. """
        pass

    def __init__(self, stop): # real signature unknown; restored from __doc__
        pass

    def __le__(self, *args, **kwargs): # real signature unknown
        """ Return self<=value. """
        pass

    def __lt__(self, *args, **kwargs): # real signature unknown
        """ Return self<value. """
        pass

    @staticmethod # known case of __new__
    def __new__(*args, **kwargs): # real signature unknown
        """ Create and return a new object.  See help(type) for accurate signature. """
        pass

    def __ne__(self, *args, **kwargs): # real signature unknown
        """ Return self!=value. """
        pass

    def __reduce__(self, *args, **kwargs): # real signature unknown
        """ Return state information for pickling. """
        pass

    def __repr__(self, *args, **kwargs): # real signature unknown
        """ Return repr(self). """
        pass

    start = property(lambda self: 0)
    """:type: int"""

    step = property(lambda self: 0)
    """:type: int"""

    stop = property(lambda self: 0)
    """:type: int"""


    __hash__ = None
  • 写回答

3条回答 默认 最新

  • 「已注销」 2023-01-19 06:29
    关注

    可以看到,slice 类中定义了一个 new 方法和一个 init 方法。

    new 方法是一个静态方法,它接受任意数量的参数,并返回一个新的 slice 对象。

    init 方法是一个实例方法,它只接受一个参数,即 stop。

    通过这两个方法的结合, Python 可以支持两种形式的调用:

    使用 slice(stop) 的形式调用,__new__方法会接受所有的参数,并返回一个新的对象,__init__方法仅接受stop参数
    使用 slice(start, stop[, step]) 的形式调用,new方法会接受所有的参数,并返回一个新的对象,__init__方法仅接受stop参数,但是通过 new 方法传递的所有参数都已经可以在这个新的对象中使用了.

    这样,就能支持使用一个参数或三个参数来创建一个 slice 对象,而不需要定义多个不同的类或方法。

    其中indices方法用于计算在一个长度为len的序列中,根据所传参数计算出起始点和终止点和步长,当超出范围时,会进行修剪。

    这就是slice类如何实现可以传递一个参数或三个参数的功能的。
    回答不易,望采纳

    评论

报告相同问题?

问题事件

  • 创建了问题 1月18日

悬赏问题

  • ¥15 STM32F103上电短路问题
  • ¥15 关于#单片机#的问题:以ATMEGA128或相近型号单片机为控制器设计直流电机调速的闭环控制系统(相关搜索:设计报告|软件设计|流程图)
  • ¥15 打开软件提示错误:failed to get wglChoosePixelFormatARB
  • ¥15 (标签-python|关键词-char)
  • ¥15 python+selenium,在新增时弹出了一个输入框
  • ¥15 苹果验机结果的api接口哪里有??单次调用1毛钱及以下。
  • ¥20 学生成绩管理系统设计
  • ¥15 来一个cc穿盾脚本开发者
  • ¥15 CST2023安装报错
  • ¥15 使用diffusionbert生成文字 结果是PAD和UNK怎么办