每天十分钟,十二天入门Python(十)

# __str__()

class Dog(object):

def __init__(self,name):

self.name = name

def __str__(self):

return ‘Dog object(%s)‘ % self.name

print Dog(‘papa‘)

# <__main__.Dog object at 0x1016b6cd0>

# Dog object(papa)

这是__str__()添加前后的分别输出的结果

# __iter__()

#!/usr/bin/env python

# -*- coding: utf8 -*-

__author__ = ‘shijn‘

class Fib(object):

def __init__(self):

self.a,self.b = 0,1

def __iter__(self):

return self

def next(self):

self.a = self.b

self.b = self.a + self.b

if self.a>1000:

raise StopIteration();

return self.a

for n in Fib():

print n

# 1

# 2

# 4

# 8

# 16

# 32

# 64

# 128

# 256

# 512

# 通过__iter__()可以让一个类可以被for...in循环所作用,__iter__()返回一个迭代对象,然后Python的佛如循环不断调用该迭代对象的next()方法拿到循环的下一个值,知道遇到StopIteration错误时退出循环.

# __getitem__()

# 上面代码实现了让一个自定义类可以像list一样进行for...in循环,不过它并不能像list一样通过下标取出对应的数据,类似这样fib()[2]是不行的.要想实现还需要在类内部实现一个__getiterm__()方法,根据它第二个参数进行判断不同的情况可以实现下标和切片等功能.

class Fib(object):

def __getitem__(self, item):

a,b = 1,1

for x in range(item):

a,b = b,a+b

return a

f = Fib()

print f[20]

# 10946

# 类似的还有__setitem__()方法,把对象视作list或者dict来对集合赋值,还有__delitem__()用于删除某个元素.

# __getattr__()

# 如果一个属性不存在,默认情况下会报错.如果我们想控制这个地方,或者让一些特殊情况不报错,可以通过__getattr__()方法,比如当调用不存在的属性name时,Python解释器会试图调用__getattr__(self,’name‘)来获取相应的属性.

class Fib(object):

def __getattr__(self, item):

if item == ‘name‘:

return ‘sky‘

f = Fib()

print f.name

# __call__()

# 对象实例通常有自己的属性和方法,当我们调用实例方法的时候,我们用instance.method()来调用.如果想直接在实例本身上调用,只需要实现__call__()即可.

class Dog(object):

def __init__(self,name):

self.name = name

def __call__(self, *args, **kwargs):

print ‘dog name is %s‘ % self.name

dog = Dog(‘papa‘)

dog()

# dog name is papa

通过callable(Dog())函数我们可以判断一个对象是否能被调用.

# type()

# 之前有介绍过通过type()获取对象的类型,更进一步它还可以创建新的类型.对于Python这样的动态语言来讲,函数和类的定义不仅在编译时也可以在运行时.

def fun(self,name=‘shijn‘):

print ‘hello %s‘ % name

Hello = type(‘Hello‘,(object,),dict(hello=fun,age=‘22‘))

h = Hello()

h.hello()

print h.age

# hello shijn

# 22

# 可以看到Hello就是一个完整的类,因为Python创建类的过程实质上就是扫描class定义的语法,然后调用type()创建了类.三个参数分别是:类的名字,继承的父类(注意单个tuple写法,可以多继承),绑定的方法或者默认属性.

metaclass

元类的概念的就是通过它能创建或者修改类,元类->类->类的实例,从这种关系看类也可以说是元类的实例.

元类在一般的应用中使用频率极低.

时间: 2024-11-07 22:52:39

每天十分钟,十二天入门Python(十)的相关文章

每天十分钟,十二天入门Python(四)

map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回. def num(x):    return x*x print map(num,[1,2,3,4,5,6,7,8,9]) # [1, 4, 9, 16, 25, 36, 49, 64, 81] reduce()把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是: def ad

每天十分钟,十二天入门Python(六)

偏函数 - 当函数的参数个数太多,需要简化时,使用functools.partial可以创建一个新的函数,这个新函数可以固定住原函数的部分参数,从而在调用时更简单. import functools int2 = functools.partial(int,base=2) print int('1000000',2) # 64 print int2('1000000') # 64 简单总结functools.partial的作用就是,把一个函数的某些参数(不管有没有默认值)给固定住(也就是设置默

十分钟快速入门 Python,看完即会,不用收藏!

本文以 Eric Matthes 的<Python编程:从入门到实践>为基础,以有一定其他语言经验的程序员视角,对书中内容提炼总结,化繁为简,将这本书的精髓融合成一篇10分钟能读完的文章. 读完本篇文章后,可对 Python 语言特性.编码风格有一定了解,并可写出简单的 Python 程序. 100?多位经验丰富的开发者参与,在 Github 上获得了近?1000?个?star?的开源项目想了解下吗?项目地址:github.com/cachecats/c- 一.安装与运行 各个系统的 Pyth

程序员带你十天快速入门Python,玩转电脑软件开发(二)

关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到熟悉的效果. 声明:本次教程主要适用于已经习得一门编程语言的程序员.想要学习第二门语言.有梦想,立志做全栈攻城狮的你 如果是小白,也可以学习本教程.不过可能有些困难.如有问题在文章下方进行讨论.或者添加QQ群538742639.群马上就满了,名额不多. 上节课主要讲解了以下内容: 为什么学习Pyth

程序员带你十天快速入门Python,玩转电脑软件开发(三)

声明:本次教程主要适用于已经习得一门编程语言的程序员.想要学习第二门语言.有梦想,立志做全栈攻城狮的你 . 如果是小白,也可以学习本教程.不过可能有些困难.如有问题在文章下方进行讨论.或者添加QQ群538742639.群马上就满了,名额不多. 这是高级程序员快速入门Python语言课程.助你快速学习Python语言.这是第三课. 程序员带你十天快速入门Python,玩转电脑软件开发(一) 程序员带你十天快速入门Python,玩转电脑软件开发(二) 因技术知识连贯性,还没有学习前两课的同学,建议点

程序员带你十天快速入门Python,玩转电脑软件开发(一)

关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到熟悉的效果. 声明:本次教程主要适用于已经习得一门编程语言的程序员.想要学习第二门语言的你.有梦想的你,立志做全栈攻城狮. 如果是小白,也可以学习本教程.不过可能有些困难.如有问题在文章下方进行讨论.或者添加QQ群538742639.群马上就满了,名额不多. 目录: 为什么学习Python? Pyt

Python语言十分钟快速入门

Python(蟒蛇)是一种动态解释型的编程语言.Python可以在Windows.UNIX.MAC等多种操作系统上使用,也可以在Java..NET开发平台上使用. AD:[51CTO技术沙龙]移动时代数据挖掘和行为分析—让用户数据更精彩! [简介] Python(蟒蛇)是一种动态解释型的编程语言.Python可以在Windows.UNIX.MAC等多种操作系统上使用,也可以在Java..NET开发平台上使用. python logo [特点] 1 Python使用C语言开发,但是Python不再

十分钟-Nginx 入门到上线

转载:https://gold.xitu.io/post/58846fceb123db7389d2b70e 前言 ??由于微信小程序要使用Https,但是又不能修改已有线上的配置.所以最简单的方法就是使用nginx转发,在nginx上使用https,然后再转发到内部服务器.Nginx由于其优良的性能.一台4核16GB的内存完全可以支撑日均百万pv级别的访问. 基础知识 ??Nginx由于使用了 epoll模型,要求linux的内核必须在2.6以上.要了解epoll模型,可以看看知乎上的这篇文章I

十分钟-Nginx入门到上线

前言 ??由于微信小程序要使用Https,但是又不能修改已有线上的配置.所以最简单的方法就是使用nginx转发,在nginx上使用https,然后再转发到内部服务器.Nginx由于其优良的性能.一台4核16GB的内存完全可以支撑日均百万pv级别的访问.基础知识??Nginx由于使用了 epoll模型,要求linux的内核必须在2.6以上. 使用 uname -a 查看Linux 内核版本,如下是Centos 6.5的显示: Linux VM_26_145_centos 2.6.32-504.30