首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

python创建类的有关问题

2012-02-23 
python创建类的问题class test():passttest()t.a10test类没有a属性为什么使用的时候可以给a属性赋值呢?P

python创建类的问题
class test():
pass

t=test()
t.a=10


test类没有a属性
为什么使用的时候可以给a属性赋值呢?

Python code
class test():    __a=10    def b(self):        return self.__as=test()s.__a=20s.b() #为什么b返回的值是10呢?


[解决办法]
没有属性a,通过赋值会自动创建一个a属性并赋值。
 #为什么b返回的值是10呢?
这是因为定义的是类变量,通过实例赋值的则自动创建一个实例变量,虽然同名。

[解决办法]
是不是这就是所谓的动态语言的特性?变量不需要事先定义



[解决办法]
探讨
没有属性a,通过赋值会自动创建一个a属性并赋值。
#为什么b返回的值是10呢?
这是因为定义的是类变量,通过实例赋值的则自动创建一个实例变量,虽然同名。

[解决办法]
我自己试了下明白了
[解决办法]
探讨
引用:

我自己试了下明白了
明白什么了?

[解决办法]
不要用静态语言的经验硬往动态语言上套,动态语言的特色之一就是对象能在运行时改变自身结构.
Python code
class test:   pass;t = test();t.a = 10; #为t这个对象动态增加一个a属性#=====================================================class test:   __a = 10;   def b(self):      return self.__a;s = test();s.__a = 20;print(s.b());#python有一个模拟私有变量的标识符混淆机制,详见python文档"the python tutorial"9.6一节,#因此第一个__a的实际名字为_test__a,重点是混淆只在类体内发生。#因为s.__a的赋值发生在外面所以不会发生混淆,而函数b在类体内,因此b实际返回的是_test_a,#你可以把所有__a替换成非私有标识符试试,如data#=====================================================class t1():    passclass t2(t1):    def p(self):        print(self.a);t1.a=10 #为类t1动态增加属性a(类似类变量)x2=t2()x2.p() #t2继承自t1,自然拥有a
[解决办法]
第一个是动态语言的特性,不需要显示声明吧

第二个是类变量和实例变量的区别
[解决办法]
没感觉乱

热点排行