鱼C论坛

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

[已解决]关于init魔法方法的一些疑惑

[复制链接]
发表于 2020-2-20 11:13:12 | 显示全部楼层 |阅读模式

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

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

x
1.对于如下代码,我想初始化两个属性,当时运行后会报错,是因为继承的str是不可变类型的吗?
  1. class CapStr(str):
  2.     def __init__(self,string,string2):
  3.         self.string = string
  4.         self.string2 = string2
复制代码

  1. >>> a = CapStr('a','b')
  2. Traceback (most recent call last):
  3.   File "<pyshell#41>", line 1, in <module>
  4.     a = CapStr('a','b')
  5. TypeError: decoding str is not supported
复制代码


2.对于init方法中除self以外的那些可选参数,如果只有一个,且不在init中对这个参数作其他操作,是不是会默认把这个参数赋值给实例变量?
如下:
  1. class CapStr(str):
  2.     def __init__(self,string):
  3.         pass
复制代码

  1. >>> a = CapStr('a')
  2. >>> a
  3. 'a'
复制代码

最佳答案
2020-2-20 11:18:13
1. 因为字符串类不支持两个初始化参数,所以应该这样:

  1. >>> class CapStr:
  2.     def __init__(self, string, string2):
  3.         self.string = string
  4.         self.string2 = string2

  5.         
  6. >>> CapStr('a', 'b')
  7. <__main__.CapStr object at 0x000001C46EF62640>
复制代码


2. 并不是,只是你的 CapStr 类恰好继承了 str 类:

  1. >>> class A(str):
  2.         def __init__(self, s):
  3.                 pass

  4.        
  5. >>> A('a')
  6. 'a'
  7. >>> class B:
  8.         def __init__(self, s):
  9.                 pass

  10.        
  11. >>> B('b')
  12. <__main__.B object at 0x000001CCBAA97100>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-20 11:18:13 | 显示全部楼层    本楼为最佳答案   
1. 因为字符串类不支持两个初始化参数,所以应该这样:

  1. >>> class CapStr:
  2.     def __init__(self, string, string2):
  3.         self.string = string
  4.         self.string2 = string2

  5.         
  6. >>> CapStr('a', 'b')
  7. <__main__.CapStr object at 0x000001C46EF62640>
复制代码


2. 并不是,只是你的 CapStr 类恰好继承了 str 类:

  1. >>> class A(str):
  2.         def __init__(self, s):
  3.                 pass

  4.        
  5. >>> A('a')
  6. 'a'
  7. >>> class B:
  8.         def __init__(self, s):
  9.                 pass

  10.        
  11. >>> B('b')
  12. <__main__.B object at 0x000001CCBAA97100>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-2-20 11:26:05 | 显示全部楼层
zltzlt 发表于 2020-2-20 11:18
1. 因为字符串类不支持两个初始化参数,所以应该这样:

谢谢大大,有没有什么方法能访问到Python给定的类的定义呢?比如字符串,元组这些。我想具体看一下它们的定义都是怎么样的,不然总觉得自己又会搞出一些不符合定义的操作。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-20 11:26:36 | 显示全部楼层
Moho 发表于 2020-2-20 11:26
谢谢大大,有没有什么方法能访问到Python给定的类的定义呢?比如字符串,元组这些。我想具体看一下它们的 ...

这些的定义是看不到的,因为这些类型是用 C 语言写成的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-20 11:28:40 | 显示全部楼层
zltzlt 发表于 2020-2-20 11:26
这些的定义是看不到的,因为这些类型是用 C 语言写成的。

原来如此,谢谢。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-2 15:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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