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。