python動態屬性值
㈠ python 用MethodType 動態給實例綁定一個屬性
以雙下劃線__開頭的變數是內部變數,只能在內部引用。舉個栗子:
>>>classa(object):
...def__init__(self):
...self.__n=3
...defp(self):
...printself.__n
...
>>>b=a()
>>>b.__n
Traceback(mostrecentcalllast):
File"<stdin>",line1,in<mole>
AttributeError:'a'objecthasnoattribute'__n'
>>>b.p()
3
而你的全局函數print_score,就是這部分:
defprint_score(self):
print'%s:%s'%(self.__name,self.__score)
#print'age:%s'%self.age
aa.print_score=MethodType(print_score,aa,Student)
這樣做替代了Student類中的同名函數。不過看起來它依然不能操作內部變數。去掉下劃線就能運行了。
㈡ 為什麼python中基本類型如 str int 的對象不能動態添加屬性
比較簡單的方式是把str和int理解為「原始數據類型」,其結構是不可以修改的。理由是,str和int是python中提供的標准數據類型,大家已經對這種數據類型的性質和用法有了普遍的共識和預定。如果硬要自己進行修改或者加上一些自定義的屬性,就很容易破壞這種「共識」,進而導致程序可讀性下降,甚至引入潛在的bug。
如果需要動態添加屬性,就自己去定義一個專門的class,並在注釋中寫清楚該class可能會具有的屬性,這樣就顯得很清楚。
㈢ python中如何循環給對象的屬性賦值
正在做一個京東評論爬蟲,幾十個欄位,按照欄位順序建好表,存儲的時候也想到了這個問題,屬性一一對應太花時間,類的屬性順序跟返回的json數據key順序一致,能否循環賦值。經過研究,方法如下。每個人情況不一樣,請根據基礎隨機應變。編輯器不太好用,沒縮進。關鍵是eval()和setattr().廣告下自己創建的python技術交流群775648064
從網上獲取到的數據resp_str="{'username':'xiaoming', 'password'='123456'}"
resp_dict = eval(resp_str),eval函數轉str到dict
classUser():username=Char()password=Integer()
user=User()
foriinresp_dict.key():
setattr(user,i,resp_dict[i])
㈣ python 如何設置元素的屬性值
int _tmain(int argc, _TCHAR* argv[])
{
TestWin32CriticalSection();
system("pause");
TestPthreadCriticalSection();
system("pause");
return 0;
}
㈤ 怎麼理解python中的屬性
對象中的屬性是吧。python的面向對象其實相當的簡單直觀。就是一個固定的指針。或者是引用。它沒有嚴格的面向對象,或者是復雜的關系。屬性就是一個類中的公共變數。
有些怪異的是,即使你沒有定義過一個屬性,可以直接給對象動態的新增一個屬性,並給它賦值。
㈥ python 如何查看object有哪些屬性值
dir([obj]):
調用這個方法將返回包含obj大多數屬性名的列表(會有一些特殊的屬性不包含在內)。obj的默認值是當前的模塊對象。
hasattr(obj, attr):
這個方法用於檢查obj是否有一個名為attr的值的屬性,返回一個布爾值。
getattr(obj, attr):
調用這個方法將返回obj中名為attr值的屬性的值,例如如果attr為』bar』,則返回obj.bar。
setattr(obj, attr, val):
調用這個方法將給obj的名為attr的值的屬性賦值為val。例如如果attr為』bar』,則相當於obj.bar = val。