关于Python内置函数的示例

 Type "copyright", "credits" or "license()" f重写or more information.
>>> class Student:
def __init__(self,score):
self.score=score
def __len__(self):
return self.score >>> Jack=Student()
>>> Jack=Student()
>>> Jack
<__main__.Student object at 0x02BDA470>
>>> len(Jack)
 >>> class qwe(str):
def upper(self):
return self.lower() >>> a='ASD'
>>> a=qwe(a)
>>> a
'ASD'
>>> a.upper()
'asd'

测试对象属性的部分方法.

 Type "copyright", "credits" or "license()" for more information.
>>> class Student():
pass >>> Jack=Student()
>>> hasattr(Jack,'name')
False
>>> Jack.name='Jack'
>>> Jack.name
'Jack'
>>> hasattr(Jack,'score')
False
>>> setattr(Jack,'socre',103)
>>> Jack.socre
103
 Type "copyright", "credits" or "license()" for more information.
>>> class Student():
name='jack' >>> jack=Student()
>>> jack.name
'jack'
>>> getattr(jack,name)
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
getattr(jack,name)
NameError: name 'name' is not defined
>>> getattr(jack,'name')
'jack'
>>> getattr(jack,'score',404)
404

关于类的实例属性和类属性

由于Python是动态语言,根据类创建的实例可以任意绑定属性 . (s.name='jack')

给实例绑定属性的方法是通过实例变量直接赋值,或者通过self变量 .

下面就是通过self变量来绑定类属性.

如果类本身就有该属性的话 , 当声明实例变量之后 , 会自动绑定类中提供的属性 , 但是如果在通过实例变量直接再将该属性再次赋值 , 这次的值可以覆盖类中的属性 , 当删除通过实例变量赋值过的属性之后 , 类中的属性就会自动重新绑定到实例变量上面.

 >>> class Student():
name='Student' >>> s=Student()
>>> s.name
'Student'
>>> s.name='jack'
>>> s.name
'jack'
>>> del s.name
>>> s
<__main__.Student object at 0x02EE34B0>
>>> s.name
'Student'
>>>

当类已经写好之后如何分别在 实例变量和类中 再次加入方法 , 方法的作用范围是什么?

2016年7月26日 02:33:28 ......不早了 去冲个澡再来 .

 Type "copyright", "credits" or "license()" for more information.
>>> class Student:
pass >>> jack=Student()
>>> # 先开始给实例变量绑定属性 (只作用于该变量)
>>> def Set_age(self,age):  #  和普通的类一样 这里也必须是 self
self.age=age >>> Set_age(jack,18)
>>> jack.age
18
>>> loser=Student()
>>> loser.age
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
loser.age
AttributeError: 'Student' object has no attribute 'age'

上面的是比较简单的 . 直接写一个函数 , 套进去就行 .

下面开始将 类 绑定方法 并且观察作用范围 .

 >>> from types import MethodType
>>> class Student():
pass >>> def Set_age(self,age):
self.age=age >>> jack=Student()
>>> Student.Set_age=MethodType(Set_age,Student)
>>> loser=Student()
>>> jack.Set_age(18)
>>> loser.Set_age(28)
>>> jack.age
28
>>>
>>> loser.age
28

可以看出来 , 不管添加方法是在该实例变量声明之前 还是 声明之后 这个实例变量都可以使用添加进去的方法 . 但是在添加之前 是不能让 已经声明的实例变量使用 将要添加的方法的.

如何限制实例的属性 .

 >>> class Student():
__slots__=('name') >>> jack=Student()
>>> jack.name='Jack'
>>> jack.score=19
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
jack.score=19
AttributeError: 'Student' object has no attribute 'score'
 >>> class Student():
__slots__=('name') >>> class Teacher(Student):
pass >>> jack=Teacher()
>>> jack.score=18
>>> jack.score
18

当继承的时候 __slots__是不起作用的 ,

当我们用  Python  的  print  输出的时候他们是调用该实例对象对应的类中 __str__函数 , 当直接调用该实例对象的时候 运行的是 __repr__

 >>> class Student():
def __init__(self,name):
self.name=name
def __str__(self):
return ('Student named %s' %self.name) >>> jack=Student('Jack')
>>> print(jack)
Student named Jack
>>> jack
<__main__.Student object at 0x02E41ED0>
>>> class Student():
def __init__(self,name):
self.name=name
def __str__(self):
return ('Student named %s' %self.name)
__repr__=__str__ >>> jack=Student('Jack')
>>> jack
Student named Jack

__iter__ 迭代

如果一个类被用于 for 循环 , 类似list 和 tuple那样 , 就必须实现一个 __iter__方法 , 该方法返回一个迭代对象 , 然后 , Python 的 for 循环就会 开始调用 __next__方法 拿到循环的下一个值 . 直到遇到 StopIteration错误时推出循环 .

下面我们写一个 Fib 类 , 可以用作for循环 ,

 >>> class Fib():
def __init__(self):
self.a,self.b=0,1 # 初始化两个计数器 a,b
def __iter__(self):
return self # 实例的本身就是迭代对象 , 故只返回自己
def __next__(self):
self.a,self.b=self.b,self.a+self.b # 计算下一个值 # 在这里 没有先后之分 .
return self.a # 返回下一个值 >>> for i in Fib():
print(i)
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765

Python 温习的更多相关文章

  1. python学习笔记之module && package

    个人总结: import module,module就是文件名,导入那个python文件 import package,package就是一个文件夹,导入的文件夹下有一个__init__.py的文件, ...

  2. 温习PYTHON语法

    看WEBPY的源码结构有点晕,原来很多语法结构都忘了,继承之些. 再看A BYTE OF PYTHON.慢慢补.. number = 23 guess = int(raw_input('Enter a ...

  3. Python黑帽编程 4.0 网络互连层攻击概述

    Python黑帽编程 4.0 网络互连层攻击概述 是时候重新温习下下面这张图了. 图2 本章的内容核心包含上图中的网络层和传输层.TCP/IP是整个网络协议体系中的核心,因为从这里开始,数据传输从局域 ...

  4. Python拾忆--多线程的socket服务器

    阳光明媚的午后,想想最近要开始从写Java到写Python了,就随手打开电脑来体验一下Python与Java之间的不同吧~ 记得我还在上大二的时候,那个时候才开始学Java,最感兴趣的就是Java书最 ...

  5. python 安装操作 MySQL 数据库.

    以ubuntu和mysql为例 检查自己的机器上面有没有安装数据库 xpower@xpower-CW65S:~$ sudo service mysql start [sudo] xpower 的密码: ...

  6. Flask —— 使用Python和OpenShift进行即时Web开发

    最近Packtpub找到了我,让我给他们新出版的关于Flask的书写书评.Flask是一个很流行的Python框架.那本书是Ron DuPlain写的<Flask 即时Web开发>.我决定 ...

  7. Python进阶(面向对象编程基础)(一)

    鉴于昨天被类和函数折腾得晕头转向,今特把类的知识翻出来温习. 1.定义类并创建实力对象 #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ ...

  8. Python新手学习基础之数据类型——字符串的切片截取

    切片截取是python中字符串常见的一些操作,我们会在这篇文章里详细介绍,切片截取的作用是获取子字符或子字符串. 实际上,我们要做的就是使用索引,用冒号分隔两个索引,形式为:变量[头下标:尾下标],冒 ...

  9. python数据分析工具包(1)——Numpy(一)

    在本科阶段,我们常用的科学计算工具是MATLAB.下面介绍python的一个非常好用而且功能强大的科学计算库--Numpy. a powerful N-dimensional array object ...

随机推荐

  1. HDUOJ----1234 开门人和关门人(浙江大学考研题)

    开门人和关门人 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  2. Java NIO框架Mina、Netty、Grizzly介绍与对比

    Mina:Mina(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用 ...

  3. jquery通过ajax方法获取json数据不执行success

    1.jquery通过ajax方法获取json数据不执行success回调 问题描述:jquery通过ajax方法获取json数据不执行success回调方法 问题原因:json格式存在问题或不符合标准 ...

  4. python 循环设计

    for循环 1.range()用法 for循环后的in跟随一个序列的画,循环每次使用的序列元素而不是序列的下标 例:s='abcdefg' for i in range(0,len(s),3): pr ...

  5. oracle错误码

    ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最大会话许可数 ORA-00020: 超出 ...

  6. Nginx+Php-fpm+MySQL+Redis源代码编译安装指南

    说明:本教程主要包括以下三个部分: 1. 源代码编译安装Nginx 2. 源代码编译安装php以及mysql.redis扩展模块 3. 配置虚拟主机 文中所涉及安装包程序均提供下载链接,欢迎使用 运行 ...

  7. Generic泛型

    1.问题 未使用泛型时,元素的类型不安全:操作麻烦,可能需要强制转换import java.util.ArrayList;import java.util.List;import org.junit. ...

  8. Mysql执行Update操作时会锁住表

    update tableA a,(select a.netbar_id,sum(a.reward_amt) reward_amt from tableB a group by a.netbar_id) ...

  9. javaMail创建邮件和发送邮件总结

    (注: 本文是参考http://www.cnblogs.com/xdp-gacl/p/4216311.html. 感谢博主的精彩的描述) 一, 前期的准备 1, 导入 mail.jar 二, 操作步骤 ...

  10. ACM心情总结

    已经快要12点了,然而还有5000字概率论论文没有动.在论文里,我本来是想要总结一下ACM竞赛中出现过的概率论题目,然而当敲打第一段前言的时候,我就迟疑了. 我问自己,ACM竞赛到底有什么现实意义. ...