鱼C论坛

 找回密码
 立即注册
查看: 2186|回复: 6

[已解决]__new__方法详解

[复制链接]
发表于 2020-10-29 20:31:41 | 显示全部楼层 |阅读模式
10鱼币
class CapStr(str):
        def __new__(cls,string):
                string = string.upper()
                return str.__new__(cls,string)

>>> a = CapStr('I love Fishc.com!')
>>> 以甲鱼这这代码举例,这里的return 语句没有看,什么意思,求解困惑好几天了
最佳答案
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)

最佳答案

查看完整内容

str.__new__方法的参数与str()函数的参数类似 第一个参数是类,在这里也就是CapStr类 第二个参数是待转换的字符串(或别的什么) 例如:str.__new__(cls, 12)可理解为str(12)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-29 21:27:13 | 显示全部楼层
先把字符串大写,然后调用str的__new__,即调用父类的new
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-10-29 21:57:21 | 显示全部楼层
冬雪雪冬 发表于 2020-10-29 21:27
先把字符串大写,然后调用str的__new__,即调用父类的new

为什么会把string参数返回,而不返回其他的,说个题外的字符串属于实例对象吗例如('string')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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'>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-30 18:31:41 | 显示全部楼层
就是先将字符串大写,然后调用父类str的__new__方法构造一个对象
str的__new__方法返回一个实例对象,所以这里也返回一个实例对象
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 00:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表