鱼C论坛

 找回密码
 立即注册
查看: 1845|回复: 9

小白求助一个关于__init__的问题

[复制链接]
发表于 2021-1-22 20:57:36 | 显示全部楼层 |阅读模式

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

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

x
一般情况下在创立一个新类 用__init__构造属性写法是
class New(object):
        def __init__(self,name):
                self.name = name

如果构造时候不确定要增加什么属性 就用
def __init__(self,*args):

然后实例化的时候从参数传入
a= A('name')

这时候 def __init__(self,*args):
                      这里怎么写啊?

比如从实例传入三个参数

a = A('name','age','wight')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-22 21:07:44 | 显示全部楼层
本帖最后由 jackz007 于 2021-1-22 21:18 编辑
  1. class New:
  2.     def __init__(self , * args):
  3.         self . name = args

  4.     def __repr__(self):
  5.         s = self . name[0]
  6.         for i in range(1 , len(self . name)):
  7.             s = s + ' ' + self . name[i]
  8.         return s

  9. a = New('name' , 'age' , 'weight')
  10. print(a)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-22 23:24:20 | 显示全部楼层
写类的时候就不应该出现这种一个属性都不确定的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-23 12:35:11 | 显示全部楼层
需要传参的时候指定是什么参数
  1. class New:
  2.     def __init__(self, name=None, age=None, weight=None):
  3.         self.name = name
  4.         self.age = age
  5.         self.weight = weight
  6.    
  7.     @classmethod
  8.     def fromdict(cls, hs):
  9.         return cls(**hs)
  10.         
  11. aaa = {'name':'aaa'}
  12. a = New.fromdict(aaa)

  13. b = New(name='bbb')

  14. print(a.name)
  15. print(b.name)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-23 17:25:49 | 显示全部楼层
参数名就是args,他是一个tuple对象,可以按照下标进行索引取值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-23 18:23:51 | 显示全部楼层
这个题目有点没有意义了,还是对类的逻辑有些理解的不够透彻,谢谢各位。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-23 18:52:02 From FishC Mobile | 显示全部楼层
kogawananari 发表于 2021-1-23 12:35
需要传参的时候指定是什么参数

  @classmethod,是什么意思呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-23 19:10:08 | 显示全部楼层
wyj19851203 发表于 2021-1-23 18:52
@classmethod,是什么意思呀

一般方法的第一个参数是实例 self
方法加了这个 第一个参数就不是实例了 而是类本身 cls
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-25 17:06:13 | 显示全部楼层
*args,是把传入的参数打包成tuple。知道它是元组,就用操作元组的方法去操作
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-25 17:30:26 | 显示全部楼层
wyj19851203 发表于 2021-1-23 18:52
@classmethod,是什么意思呀

就是类的方法,可以这样调用:
  1. New.fromdict()
复制代码

而不是实例的方法:
  1. New().fromdict()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-22 02:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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