huyanmin 发表于 2021-3-27 12:24:04

Python 重写左移位,求详解

本帖最后由 huyanmin 于 2021-3-27 12:28 编辑

class Nstr(str):
    def __lshift__(self, other):
      return self + self[:other]

    def __rshift__(self, other):
      return self[-other:] + self[:-other]



>>> a = Nstr('I love FishC.com!')   #有形参才会传入实参,此处的‘I love FishC.com!’ 是以参数的形式传入的,在上面类定义中哪个是形参啊?怎么分辨是形参呢?
>>> a << 3
'ove FishC.com!I l'
>>> a >> 3
'om!I love FishC.c'

qiuyouzhi 发表于 2021-3-27 12:26:13

Nstr这个类继承了str,所以Nstr("qweqwe")就相当于str("qweqwe")。

jackz007 发表于 2021-3-27 12:38:42

本帖最后由 jackz007 于 2021-3-27 12:45 编辑

      NStr 继承自 str
    a = NStr('I love FishC.com!')
      所以,a 可以被视为一个字符串对象
    a << 3# self 是 a,other 是 3
所以
    self + self[:other]
=
    a + a[: 3]
    a >> 3# self 是 a,other 是 3
所以
    self[-other:] + self[:-other]
=
    a[-3:] + a[: -3]

huyanmin 发表于 2021-3-27 12:43:18

你的意思self是形参吗?

jackz007 发表于 2021-3-27 12:48:29

本帖最后由 jackz007 于 2021-3-27 12:57 编辑

huyanmin 发表于 2021-3-27 12:43
你的意思self是形参吗?

      self 是写类方法时用到的形参,代表对象自身,在调用方法时,此参数不会出现,不能写进代码。
      例如,self . abc = 123,是为对象的属性 abc 赋值,self . foo() 是调用对象的 foo() 方法,当然,这样的代码只能存在于类方法定义中。如果在类定义以外,假设新创建的实例对象是 a,那么,为属性 abc 赋值应该写为 a . abc = 123,调用 foo() 方法应该写为 a . foo()。看出来了?self 就是 a!
页: [1]
查看完整版本: Python 重写左移位,求详解