qin_yin 发表于 2020-10-29 20:31:41

__new__方法详解

class CapStr(str):
      def __new__(cls,string):
                string = string.upper()
                return str.__new__(cls,string)

>>> a = CapStr('I love Fishc.com!')
>>> 以甲鱼这这代码举例,这里的return 语句没有看,什么意思,求解困惑好几天了

lhgzbxhz 发表于 2020-10-29 20:31:42

qin_yin 发表于 2020-10-30 21:25
不理解,str.__new__的这里的参数,如果我传入两个参数,给str.__New__那么就会报错,
Traceback (most...

str.__new__方法的参数与str()函数的参数类似
第一个参数是类,在这里也就是CapStr类
第二个参数是待转换的字符串(或别的什么)
例如:str.__new__(cls, 12)可理解为str(12)

冬雪雪冬 发表于 2020-10-29 21:27:13

先把字符串大写,然后调用str的__new__,即调用父类的new

qin_yin 发表于 2020-10-29 21:57:21

冬雪雪冬 发表于 2020-10-29 21:27
先把字符串大写,然后调用str的__new__,即调用父类的new

为什么会把string参数返回,而不返回其他的,说个题外的字符串属于实例对象吗例如('string')

笨鸟学飞 发表于 2020-10-29 23:54:10

你输入help(str):
|Static methods defined here:
|
|__new__(*args, **kwargs) from builtins.type
|      Create and return a new object.See help(type) for accurate signature.
==============是实例对象==============
>>> type('string')
<class 'str'>

lhgzbxhz 发表于 2020-10-30 18:31:41

就是先将字符串大写,然后调用父类str的__new__方法构造一个对象
str的__new__方法返回一个实例对象,所以这里也返回一个实例对象

qin_yin 发表于 2020-10-30 21:25:34

lhgzbxhz 发表于 2020-10-30 18:31
就是先将字符串大写,然后调用父类str的__new__方法构造一个对象
str的__new__方法返回一个实例对象,所以 ...

不理解,str.__new__的这里的参数,如果我传入两个参数,给str.__New__那么就会报错,
Traceback (most recent call last):
File "<pyshell#206>", line 1, in <module>
    a = CapStr('ad','ad')
File "<pyshell#203>", line 5, in __new__
    return str.__new__(cls,string,b)
TypeError: decoding str is not supported
页: [1]
查看完整版本: __new__方法详解