lxx213 发表于 2021-1-22 20:57:36

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

一般情况下在创立一个新类 用__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')

jackz007 发表于 2021-1-22 21:07:44

本帖最后由 jackz007 于 2021-1-22 21:18 编辑

class New:
    def __init__(self , * args):
      self . name = args

    def __repr__(self):
      s = self . name
      for i in range(1 , len(self . name)):
            s = s + ' ' + self . name
      return s

a = New('name' , 'age' , 'weight')
print(a)

°蓝鲤歌蓝 发表于 2021-1-22 23:24:20

写类的时候就不应该出现这种一个属性都不确定的。

kogawananari 发表于 2021-1-23 12:35:11

需要传参的时候指定是什么参数
class New:
    def __init__(self, name=None, age=None, weight=None):
      self.name = name
      self.age = age
      self.weight = weight
   
    @classmethod
    def fromdict(cls, hs):
      return cls(**hs)
      
aaa = {'name':'aaa'}
a = New.fromdict(aaa)

b = New(name='bbb')

print(a.name)
print(b.name)

immotral 发表于 2021-1-23 17:25:49

参数名就是args,他是一个tuple对象,可以按照下标进行索引取值。

lxx213 发表于 2021-1-23 18:23:51

这个题目有点没有意义了,还是对类的逻辑有些理解的不够透彻,谢谢各位。

wyj19851203 发表于 2021-1-23 18:52:02

kogawananari 发表于 2021-1-23 12:35
需要传参的时候指定是什么参数

@classmethod,是什么意思呀

kogawananari 发表于 2021-1-23 19:10:08

wyj19851203 发表于 2021-1-23 18:52
@classmethod,是什么意思呀

一般方法的第一个参数是实例 self
方法加了这个 第一个参数就不是实例了 而是类本身 cls

记忆的欠片 发表于 2021-1-25 17:06:13

*args,是把传入的参数打包成tuple。知道它是元组,就用操作元组的方法去操作

亿只小猪仔 发表于 2021-1-25 17:30:26

wyj19851203 发表于 2021-1-23 18:52
@classmethod,是什么意思呀

就是类的方法,可以这样调用:
New.fromdict()
而不是实例的方法:
New().fromdict()
页: [1]
查看完整版本: 小白求助一个关于__init__的问题