- 毅力与勇气是事业的双飞翼; - 在尝试中成长,在失败中奋起。 - 概览 -> 细读 -> 概览 - 书不在多,在于精。
分类: Python/Ruby
2014-06-11 15:27:25
什么是新式类和旧式类?
新式类 class A(object): 在新式类中(继承object),查找一个要调用的函数或者属性的时候,是广度优先搜搜的。
旧式类 class A: 在旧式类当中,是深度优先搜索的。
new style class支持内置类型的派生,可以处理metaclass(元类),还有property(属性),总之是一些相对高级的特性。
-----------------------------------------------
在python中,类是可以多重继承的。python类中的所有成员变量都是类似java语言中的public的。
------------------------------类属性-----------------------------
在python中,类中定义的函数也是对象。也可以修改赋值。
这个例子的输出结果如下:
f
ff
ff
通过上面的结果,可看出来,a.f=ff的时候,对象a中的函数已经被修改成ff函数了。
另外,xf也是一个函数对象。
------------------------------------------------
对于继承,python提供了两个函数:issubclass()和isinstance()
看例子:
>>> issubclass(bool,int)
True
>>>
结果输出是True,说明bool是int的子类。
主要还是学习一下多重继承的概念。
py中多重继承的语法如下:
class Myclass(base1,base2,base3):
---------------------------------------------------
---------------------------------------
命名空间
python中,不同命名空间中的内容可以重名。比如说在A模块中定义一个max函数,在B模块中也定义一个max函数,那么二者是不冲突的。在调用的时候,只需要在函数名字前面加上模块名字即可。
在python中,一切都是对象。严格的说,在模块中,对名字的引用就是属性引用。在表达式modulename.functionname中,modulename是一个模块对象。function那么则是该对象的一个属性。
属性分为只读的和可写的。如果是可写的属性,那么就可以使用del来删除了。比如说在一个类中删除一个属性的例子如下:
执行代码的结果:
Traceback (most recent call last):
File "C:\Users\naughty\workspace\ttt\com\d.py", line 15, in
100
print a.value
AttributeError: 'OOO' object has no attribute 'value'
可以看到,属性value在删除之前是可以输出的。删除之后,再次输出就会抛出异常了。
也可以删除引入的另外一个模块的内容:
data模块如下:
---------------------------------------------
既然涉及到了命名空间,那么有必要说一下global的使用。
global的使用了是为了在一个代码块中声明一个变量是全局变量。
在上面这个例子中,modify函数中使用了global,然后修改了a的值,并打印。
在代码最后也打印了a的值。
执行代码输出如下:
global a!
inner a!
inner a!#这里的值被修改了
这说明,global确实起到作用了。
如果这里不使用global的话,那么根据python对变量赋值的原则,这里会在modify这个函数的局部空间中修改变量a,并不会反映到全局。
删除global a之后,再次执行,输出如下:
global a!
inner a!
global a!
转自:http://blog.csdn.net/imzoer/article/details/8737642