鱼C论坛

 找回密码
 立即注册
查看: 1746|回复: 7

[已解决]super().__init__()参数赋值问题

[复制链接]
发表于 2019-9-9 15:43:10 | 显示全部楼层 |阅读模式

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

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

x
class B(A):
        def __init__(self):
                super().__init__(self,name,age,height)


if __name__ == "__main__":
        B()

class B继承A,然后在实例化的时候需要传递一些参数,每项参数都有很多值,比如age有15,16,17,18.....需要按需传递,

如何可以在class B的‘super().__init__(self,name,age,height)’里面实现按需要赋值给参数呢?
最佳答案
2019-9-11 08:59:10
niuthon 发表于 2019-9-9 16:26
问题是我的实参是任意的,比如name可能是临时录入,我想到name,age,height这些形参做成列表(list_name ...

你可能需要的是这个:

  1. class A(object):

  2.     def __init__(self):
  3.         self._default = "我是默认值"


  4. class B(A):

  5.     def __init__(self, _dict: dict):
  6.         """
  7.         :param _dict: 是一个字典
  8.         """
  9.         super().__init__()

  10.         self._dict = _dict

  11.     def _set_attr(self):
  12.         for key, value in self._dict.items():
  13.             print(f"设置 self.{key} 为: ", value)
  14.             setattr(self, key, value)

  15.     def print_attr(self):

  16.         self._set_attr()
  17.         
  18.         for key in self._dict.keys():
  19.             attr = getattr(self, key, "未设置默认值")
  20.             print(f"获取 self.{key} 为: ", attr)


  21. if __name__ == '__main__':
  22.     temp = {"key0": "我是 Key0", "key1": "我是 Key1", "key2": "我是 Key2", "key3": "我是 Key3"}
  23.     b = B(temp)
  24.     b.print_attr()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-9 15:47:31 | 显示全部楼层
我觉得你你应该可以这样

Age 这个是形参是 List 类型。

然后你在 Class 里面拿到实参之后,再 for 出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-9 16:26:00 | 显示全部楼层
、尾指一勾 发表于 2019-9-9 15:47
我觉得你你应该可以这样

Age 这个是形参是 List 类型。

问题是我的实参是任意的,比如name可能是临时录入,我想到name,age,height这些形参做成列表(list_name=[])的形式,问题就是我不懂在获取到实参后怎么传过去。。。。你可以说的更详细点吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-9 18:46:37 | 显示全部楼层
python中有实参这种说法吗?

你是不是指:
  1. class B(A):
  2.          def __init__(self,name,age,height):
  3.                  super().__init__(self,name,age,height)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-10 16:08:40 | 显示全部楼层
永恒的蓝色梦想 发表于 2019-9-9 18:46
python中有实参这种说法吗?

你是不是指:

没有吗? 那你理解的实参是什么?我要问的不是你说的这个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-10 21:10:03 | 显示全部楼层
niuthon 发表于 2019-9-10 16:08
没有吗? 那你理解的实参是什么?我要问的不是你说的这个
  1. B(age=xxx, name=xxx, height=xxx)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-11 08:59:10 | 显示全部楼层    本楼为最佳答案   
niuthon 发表于 2019-9-9 16:26
问题是我的实参是任意的,比如name可能是临时录入,我想到name,age,height这些形参做成列表(list_name ...

你可能需要的是这个:

  1. class A(object):

  2.     def __init__(self):
  3.         self._default = "我是默认值"


  4. class B(A):

  5.     def __init__(self, _dict: dict):
  6.         """
  7.         :param _dict: 是一个字典
  8.         """
  9.         super().__init__()

  10.         self._dict = _dict

  11.     def _set_attr(self):
  12.         for key, value in self._dict.items():
  13.             print(f"设置 self.{key} 为: ", value)
  14.             setattr(self, key, value)

  15.     def print_attr(self):

  16.         self._set_attr()
  17.         
  18.         for key in self._dict.keys():
  19.             attr = getattr(self, key, "未设置默认值")
  20.             print(f"获取 self.{key} 为: ", attr)


  21. if __name__ == '__main__':
  22.     temp = {"key0": "我是 Key0", "key1": "我是 Key1", "key2": "我是 Key2", "key3": "我是 Key3"}
  23.     b = B(temp)
  24.     b.print_attr()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-17 11:13:10 | 显示全部楼层
、尾指一勾 发表于 2019-9-11 08:59
你可能需要的是这个:

谢谢,你说这个方法可能是比较接近的,我再研究一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 04:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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