这样为什么不行
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
为什么不行
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
为什么不行
2015-11-26
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''.
个人之见,欢迎指正
举报