Python 高级编程笔记之类别

目录:

  1. 子类化内建类型
  2. 访问超类中的方法-super
  3. 描述符 & 属性
  4. 元编程

主要内容:

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()

运行结果:
Python 高级编程笔记之类别_第1张图片

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类等。它们是定义另一个特性可能访问方式的类。换句话说,一个类可以委托另一个类来管理其特性。

描述符类基于三个必须实现的特殊方法:

  1. _ set _ 在任何特性被设置的时候调用
  2. _ get _ 在任何特性被读取的时候调用
  3. _ delete _ 在特性上请求del时调用
# -*- 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/

你可能感兴趣的:(Timen_Python)