为了账号安全,请及时绑定邮箱和手机立即绑定

这样为什么不行

class Person(object):    def __init__(self, name, gender, **kw):        for k,v in kv:            self.k = v p = Person('Bob', 'Male', age=18, course='Python') print p.age print p.course


为什么不行

正在回答

2 回答

class Person(object):
        def __init__(self, name, gender, **kw):
                    self.name=name
                    self.gender=gender
                    for k,v in kw.iteritems():
                        self.k = v 
p = Person('Bob', 'Male', age=18, course='Python') 
print p.name
print p.age 
print p.course

你想写的应该是这样的,你的代码里有点儿基本的错误,我稍作修改了一下。下面说一下我自己的理解

这段代码运行的时候会输出 Bob 报错会提示Person中没有age的属性,但是如果我们写:

print p.k

,那么结果会输出 18。也就是说代码中的

self.k = v

并不是把 v='age'中age赋值给了Person属性,而是把v当做了Person的属性了。这一章节中介绍的setattr()的方法应该是在函数中将v取到的值进行了处理,进而转化为类的属性。

setattr(...)
    setattr(object, name, value)
    Set a named attribute on an object; setattr(x, 'y', v) is equivalent to
    ``x.y = v''.

个人之见,欢迎指正


6 回复 有任何疑惑可以回复我~
#1

秦始瑝3250279

好答案
2016-05-19 回复 有任何疑惑可以回复我~
#2

慕丝0599876

你说的v = 'age' 是指的是k = 'age' 的意思吧
2018-08-26 回复 有任何疑惑可以回复我~

k,v分别代表字典中的键和值,你的写法是错误的

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
python进阶
  • 参与学习       255665    人
  • 解答问题       2949    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

这样为什么不行

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信