鱼C论坛

 找回密码
 立即注册
查看: 2823|回复: 4

小白之路2. 魔法方法的一些小白问题~!

[复制链接]
发表于 2015-5-23 18:06:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 citian3094 于 2015-5-23 18:25 编辑

看小甲鱼关于类方面的课始终较难吸收,有好多地方不懂,望大家赐教!!:kiss:

首先想问的是一般 __new__ 方法和 __init__ 方法是不是很少一起用?

利用小甲鱼在视频中的需求:将输入小写字符串,返回大写字符串,
那么我将小甲鱼视频中的代码改成:
  1. class CapStr(str):
  2.         def __new__(cls,string):
  3.                 string = string.upper()  
  4.                 return str.__new__(cls,string)
  5.         def __init__(self,string):
  6.                 self.string=string
  7.                 print (self.string)
  8.         def addfive(self):
  9.                 self.string +="5"
  10.                 return self.string
复制代码


那么创建一个实例对象时,由于代码中有Print self.string  却打印的是小写
  1. >>> a=CapStr("hello")
  2. hello
复制代码

也就是说变量并没有大写化
  1. >>> a.string
  2. 'hello'
复制代码


但直接输入a时,有大写HELLO
  1. >>> a
  2. 'HELLO'
复制代码

那么另外使用类中的内置函数,同样也是小写
  1. >>> a.addfive()
  2. 'hello5'
复制代码

请问大家这块应该怎么理解呢??谢谢大家!




小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-5-23 21:38:46 | 显示全部楼层
楼主看看这个贴子贴中的__new__方法的写法似乎和你稍有不同,你可以研究一下,具体我似乎也不是很明白~~
http://my.oschina.net/leejun2005/blog/207371
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-23 22:54:49 | 显示全部楼层
lightninng 发表于 2015-5-23 21:38
楼主看看这个贴子贴中的__new__方法的写法似乎和你稍有不同,你可以研究一下,具体我似乎也不是很明白~~
h ...

好的!谢谢!我研究一下!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-5-24 12:01:24 | 显示全部楼层
__new__里  把string 变成 self.string试试
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-24 13:36:24 | 显示全部楼层
Reed 发表于 2015-5-24 12:01
__new__里  把string 变成 self.string试试

谢谢您的回复!
不知道您说的是哪个string?我之前试过在各个string前加了self,基本都报错了
1.  在new() 括号内加self,运行前直接报错,返回invalid syntax
  1. class CapStr(str):
  2.         def __new__(cls,self.string):
  3.                 string = tring.upper()  
  4.                 return str.__new__(cls,string)
  5.         def __init__(self,string):
  6.                 self.string=string
  7.                 print (self.string)
  8.         def addfive(self):
  9.                 self.string +="5"
  10.                 return self.string
复制代码

QQ截图20150524133051.jpg



2. 在new内的赋值里加上self,运行后报错
  1. class CapStr(str):
  2.         def __new__(cls,string):
  3.                 self.string = string.upper()  
  4.                 return str.__new__(cls,string)
  5.         def __init__(self,string):
  6.                 self.string=string
  7.                 print (self.string)
  8.         def addfive(self):
  9.                 self.string +="5"
  10.                 return self.string
复制代码

返回self is  not.defined错误,这里出错了,所以没有尝试在return 里加self的情况了
  1. Traceback (most recent call last):
  2.   File "<pyshell#5>", line 1, in <module>
  3.     a=CapStr("a")
  4.   File "C:/Users/David/Desktop/1.py", line 3, in __new__
  5.     self.string = string.upper()
  6. NameError: name 'self' is not defined
复制代码



小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-16 05:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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