chong0918 发表于 2020-8-23 16:31:30

a=Nstr('i love fishc.com!'),传入一个参数,__init__里不需要添加一个参数吗

请问下边这个代码,不需要在__init__里添加一个参数就可以直接实例化对象的时候写成a=Nstr('i love fishc.com!')的吗?我理解的是这里实例化对象传入一个字符串参数,__init__里在self后边也应该添加一个参数吧。

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

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


比如下边这个实例化过程
>>> a=Nstr('FishC')
>>> b=Nstr('FishC')
>>> a+b
代码就在__init__里定义了arg=''来接收传入的字符串

class Nstr(str):
    def__init__(self,arg=''):
      if isinstance(arg,str):
            self.total=0
            for i in arg:
                self.total+=ord(i)
      else:
            print('参数错误')

    def __add__(self,other):
      return self.total+other.total

Twilight6 发表于 2020-8-23 16:34:27

请问下边这个代码,不需要在__init__里添加一个参数就可以直接实例化对象的时候写成a=Nstr('i love fishc.com!')的吗?

因为这里继承了 str 类,所以 str 类能用的,Nstr 现在可以用

因为 str 父类已经帮你定义好了,所以只要你不重写,就可以直接使用 str 的功能了,除非你重写__init__ 和 __new__ 时候需要加上参数的定义

chong0918 发表于 2020-8-23 16:43:19

Twilight6 发表于 2020-8-23 16:34
因为这里继承了 str 类,所以 str 类能用的,Nstr 现在可以用

因为 str 父类已经帮你定义好了,所以 ...

好的,谢谢
页: [1]
查看完整版本: a=Nstr('i love fishc.com!'),传入一个参数,__init__里不需要添加一个参数吗