python_高级

Posted 一顿操作猛如虎

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python_高级相关的知识,希望对你有一定的参考价值。

元组的初始化

  1. 39行
  2. 分割字符串,然后直接放到元组里面

通过静态方法或类方法实例对象然后返回

  1. 34行和40行,静态方法和类方法创建实例对象,然后返回

  1. 34行和41行

  1. 76和79行,
  2. 一般来说,创建实例对象都是直接通过调用类名new一个实例对象,但是有时候,调用有些要传入__init__()函数的参数,需要做一些预处理,这些预处理,就是可以放在其他位置也不是很好,就是可以放在这个类的静态方法或者类方法里面,然后在类方法里面处理完成,然后在创建实例,然后返回.大概就是这样的逻辑.

实例方法,类方法,静态方法的区别

  1. 106-110行

私有属性

  1. 43行,私有属性无法访问

  1. 48行,实际上也可以访问私有属性
  2. 53行,python中私有属性的机制

dict

实例名.dict

  1. 14行

实例名.dict[\'key\'] = value

类名.dict

  1. 18行,类的__dict__中能看到更多的信息

mro

  1. 31行

Mixin模式

  1. 通用功能抽取封装Mixin类
  2. 通过多继承

同时使用才能有效

  1. 38行,因为to_dict(),所有JSONMixin和DicMixin必须同时使用,JSONMixin才能有效

python Class:面向对象高级编程 __getitem__

官网解释:

  • object.__getitem__(selfkey)

  • Called to implement evaluation of self[key]. For sequence types, the accepted keys should be integers and slice objects. Note that the special interpretation of negative indexes (if the class wishes to emulate a sequence type) is up to the __getitem__()method. If key is of an inappropriate type, TypeError may be raised; if of a value outside the set of indexes for the sequence (after any special interpretation of negative values), IndexError should be raised. For mapping types, if key is missing (not in the container), KeyError should be raised.

    Note:

    for loops expect that an IndexError will be raised for illegal indexes to allow proper detection of the end of the sequence.


对于Fibonacci数列,当我们想抽取特定位置的值看,那又该怎么做,于是就出来了__getitem__这样的函数。


int、list类型:切片(没有step)

#!/usr/bin/python

# -*- coding: utf-8 -*-


class Fib(object):

    def __getitem__(self, n):

        if isinstance(n, int): # n是索引

            a, b = 1, 1

            for x in range(n):

                a, b = b, a + b

            return a

        if isinstance(n, slice): # n是切片

            start = n.start

            stop = n.stop

            if start is None:

                start = 0

            a, b = 1, 1

            L = []

            for x in range(stop):

                if x >= start:

                    L.append(a)

                a, b = b, a + b

            return L

            

f = Fib()

print f[0:4]

技术分享图片

print f[9]

技术分享图片

以上是关于python_高级的主要内容,如果未能解决你的问题,请参考以下文章

python高级特性

python Class:面向对象高级编程 __getitem__

python高级之生成器&迭代器

Python面向对象高级编程-__slots__定制类,枚举

Python 面向对象之高级编程

11_6 Python高级