python_高级
Posted 一顿操作猛如虎
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python_高级相关的知识,希望对你有一定的参考价值。
元组的初始化
- 39行
- 分割字符串,然后直接放到元组里面
通过静态方法或类方法实例对象然后返回
- 34行和40行,静态方法和类方法创建实例对象,然后返回
- 34行和41行
- 76和79行,
- 一般来说,创建实例对象都是直接通过调用类名new一个实例对象,但是有时候,调用有些要传入__init__()函数的参数,需要做一些预处理,这些预处理,就是可以放在其他位置也不是很好,就是可以放在这个类的静态方法或者类方法里面,然后在类方法里面处理完成,然后在创建实例,然后返回.大概就是这样的逻辑.
实例方法,类方法,静态方法的区别
- 106-110行
私有属性
- 43行,私有属性无法访问
- 48行,实际上也可以访问私有属性
- 53行,python中私有属性的机制
dict
实例名.dict
- 14行
实例名.dict[\'key\'] = value
类名.dict
- 18行,类的__dict__中能看到更多的信息
mro
- 31行
Mixin模式
- 通用功能抽取封装Mixin类
- 通过多继承
同时使用才能有效
- 38行,因为to_dict(),所有JSONMixin和DicMixin必须同时使用,JSONMixin才能有效
python Class:面向对象高级编程 __getitem__
官网解释:
object.
__getitem__
(self, key)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 anIndexError
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 Class:面向对象高级编程 __getitem__