目录:
主要内容:
1.子类化内建类型
# -*- coding:utf-8 -*-
class Folder(list):
def __init__(self, name):
self.name = name
def dir(self):
print "I am : %s" % self.name
for el in self:
print el
a = Folder("test")
a.append("test2")
a.append("test3")
a.dir()
2.访问超类中的方法-super
# -*- coding:utf-8 -*-
# super是用来解决多重继承问题,单继承没问题,多继承中涉及到查找顺序,重复调用等一些列问题,前人留下来的经验:
# 保持一致性,要不全部用类名调用父类,要不全部用super
class Mama(object):
def say(self):
print "do you work"
class Sister(Mama):
def say(self):
# Mama.say(self) # 老方法
super(Sister, self).say() # super
print "just for work"
Ting = Sister()
Ting.say()
运行结果:
do you work
just for work
3.描述符 & 属性
描述符是Python中复杂特性访问的基础,它们在内部使用,以实现属性、类、静态方法和super类等。它们是定义另一个特性可能访问方式的类。换句话说,一个类可以委托另一个类来管理其特性。
描述符类基于三个必须实现的特殊方法:
# -*- coding:utf-8 -*-
class myStaticmethod(object):
def __init__(self, method):
self.staticmethod=method
def __get__(self, object,type):
return self.staticmethod
class myClassmethod(object):
def __init__(self, method):
self.classmethod=method
def __get__(self, cobject, type):
def _deco():
return self.classmethod(type)
return _deco
class myTestDemo(object):
name='lwy'
def staticShow():
print 'static'
staticShow = myStaticmethod(staticShow)
def classShow(cls):
print cls.name
classShow = myClassmethod(classShow)
t=myTestDemo()
t.staticShow()
t.classShow()
运行结果:
static
lwy
4.元编程
new-style类带来了一种能力,可以通过两个特殊的方法—_ new _ 和_ metaclass _在运行时修改类和对象的定义。
# -*- coding:utf-8 -*-
# __new__方法必须返回一个类的实例。因此,它可以在对象创建之前或之后修改类
# __init__很大程度上已经满足类实例化的进行初始化
class MyClass(object):
def __new__(cls, *args, **kwargs):
print "__new__"
return object.__new__(cls)
def __init__(self):
print "__init__"
# __metaclass__(元类)
# 元类(metaclass)提供了在类对象通过工厂方法(factory)在内存中创建时进行交互的能力。它们的效果与
# __new__类似,只不过是类级别上运行
# 元类 一时半会看不懂,具体项目中也很少用到,以后用到了再来深度研究一下
if __name__ == '__main__':
my_class = MyClass()
# 输出结果:
# __new__
# __init__
参考文献:
Python之美[从菜鸟到高手]–玩转描述符和属性
深刻理解Python中的元类(metaclass)
总结:
第三章讲的四点,真不愧是Python高级编程书籍,讲的这些都不是很懂,在写了一年多的Python代码了,都没写过这些,只是看别人的代码中出现过。_ new _ 方法一般都没用到,用 _ init _,调用类也没有用super, 直接是类名,今后代码中多多尝试这些新方法,看看这些新方法究竟有啥子好处。
本人利用Bootstrap + EasyUI + Django开发网站:http://www.xuyangting.com/ 欢迎来访
阳台测试: 239547991(群号)
本人博客:http://xuyangting.sinaapp.com/