亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

這樣為什么不行

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進階
  • 參與學習       255563    人
  • 解答問題       3038    個

學習函數式、模塊和面向對象編程,掌握Python高級程序設計

進入課程

這樣為什么不行

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號