一、random模块:随机数

import random
print random.random()
print random.randint(,)
print random.randrange(,) print chr() #实现字母和数字的相互转换
print ord("y") num = random.randrange(,) #生成随机字母
print chr(num) ##################
生成验证码示例
import random
checkcode = ''
for i in range():
current = random.randrange(,)
if current != i:
temp = chr(random.randint(,))
else:
temp = random.randint(,)
checkcode += str(temp)
print checkcode

二、面向对象三大特性之封装

self 表示实例化之后的实例

###########################
python __init__方法传参数的两种方法:

#!/usr/bin/env python
# _*_ coding:utf- _*_ # #### 定义类 #### class DbHelper(object): def __init__(self): #固定
self.hostname = '1.1.1.1'
self.port =
self.password = 'pwd'
self.username = 'root' def fetch(self):
# 连接数据库
# 拼接sql语句
# 操作
print self.hostname
pass def create(self):
# 连接数据库
# 拼接sql语句
# 操作
print self.username
pass def remove(self):
# 连接数据库
# 拼接sql语句
# 操作
pass def modify(self):
# 连接数据库
# 拼接sql语句
# 操作
pass # #### 操作类 #### db = DbHelper()
db.create() # ##################### 定义类 #####################

class Person: def __init__(self, na, gen, age, fig): #实例化传参
self.name = na
self.gender = gen
self.age = age
self.fight =fig def grassland(self):
"""注释:草丛战斗,消耗200战斗力""" self.fight = self.fight - # ##################### 创建实例 ##################### cang = Person('苍井井', '女', , ) # 创建苍井井角色
dong = Person('东尼木木', '男', , ) # 创建东尼木木角色
bo = Person('波多多', '女', , ) # 创建波多多角色

三、面向对象三大特性之继承

类的继承只与类有关系,与对象没有关系

类的多继承:多继承只是python的特性,在其他语言中不支持;(实际没有什么卵用,但是在面试的时候可能会用到)

经典类:深度优先

新式类:广度优先

########################
经典类
class D:
def bar(self):
print "D.bar" class C(D): def bar(self):
print 'C.bar' class B(D):
pass class A(B,C): #深度优先,经典类
pass a = A()
a.bar()
##############################
新式类 class D(object):
def bar(self):
print "D.bar" class C(D): def bar(self):
print 'C.bar' class B(D):
pass class A(B,C): #深度优先,经典类
pass a = A()
a.bar()

四、面向对象类成员之字段

类成员:

字段:普通字段、静态字段

方法:普通方法、类方法、静态方法

属性:普通属性

class Person(object):
def __int__(self,name,age):
self.name = name #普通字段
self.age = age
def func(self):
return '123'
@property #属性,将方法伪造为字段
def att(self):
return '123' obj = Person('Charles',22)
obj.func()
#obj.att '''
class Province():
contry = "中国" #静态字段
def __init__(self,name):
self.name = name shanxi = Province('山西')
shanxi.contry
'''

  

#####################属性########################

属性相当于将类的方法转换为字段,可以直接使用访问类的字段的方式访问属性

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
class Person(object):
def __init__(self,name,salary):
self.name = name #普通字段
self.salary = salary def func(self):
return '123'
@property #属性,将方法伪造成字段,可以使用字段的方法去访问了
def att(self):
return '123'
@property
def compute(self):
return '66666'
obj = Person('Charles',20000)
print obj.name obj.func()
print obj.compute
obj.att 结果为:
E:\python\python.exe E:/python_scripts/11S_07day/index.py
Charles
66666
123

  

###################普通字段和静态字段####################

#!/usr/bin/env python
# _*_ coding:utf- _*_
class Person(object):
def __init__(self,name,salary):
self.name = name #普通字段,保存在对象里面
self.salary = salary def func(self):
return ''
@property #属性,将方法伪造成字段,可以使用字段的方法去访问了
def att(self):
return ''
@property
def compute(self):
return ''
obj = Person('Charles',)
print obj.name obj.func()
print obj.compute
obj.att class Province(object): county = "中国" #静态字段,保存在类里面,所有的对象都可以访问
def __init__(self,name):
self.name = name shanxi = Province("山西")
shandong = Province("山东")
print id(shanxi.county)
print id(shandong.county) 结果为:
E:\python\python.exe E:/python_scripts/11S_07day/index.py
Charles #静态字段的内存地址相同

普通字段:是保存在对象中的

静态字段:是保存在类中的

所以在访问的时候,建议访问普通字段的使用对象访问,访问静态字段的时候使用类访问(在其他语言中,静态字段只能使用类进行访问);

class Province(object):

    county = "中国"    #静态字段,保存在类里面,所有的对象都可以访问
def __init__(self,name):
self.name = name shanxi = Province("山西")
shandong = Province("山东")
print id(shanxi.county)
print id(shandong.county)
print id(Province.county)
print Province.county #使用类访问静态字段

五、面向对象成员之方法

self为形式参数


######################类方法##########################

#!/usr/bin/env python
# _*_ coding:utf-8 _*_ class Province(object):
def f1(self): #普通方法,对象调用
pass @classmethod #类方法,对类方法进行了约束:是能有一个参数,参数把当前类传进来
def f2(cls): #参数只能有一个,且必须为cls,由类调用,cls相当于class
print cls
pass @staticmethod #静态方法;类+静态方法=函数,为其他语言使用函数式编程提供了方法
def f3(s1,a1): #由类调用,参数随便写
pass Province.f2()
Province.f3(11,22) 结果为:

E:\python\python.exe E:/python_scripts/11S_07day/index1.py
<class '__main__.Province'>

六、面向对象成员之属性

python的属性使用的较少,原因是不像其他语言的那么强大

使用方法:

方法前面加@proproty

参数只能有self

调用时不能用括号

应于实例:

现在有这样有一种需求,在向数据库请求数据的时候,页面展示只能一次性展示10行,那么在每次就从数据库中读取10行,如何将需要展示的行数读取出来?

class Pager:
def __init__(self,current_page):
self.current_page = current_page
self.per_items = @property
def start(self):
val = (self.current_page - ) * self.per_items
return val
@property
def end(self):
val = self.current_page * self.per_items
return val P = Pager()
print P.start
print P.end SQL语句就可以书写如下:
#select * from a limit p.start:p.end

属性的另一种表达方式,与上述@property的效果相同

class Foo:
def get_bar(self):
return 'Charles'
BAR = property(get_bar) #属性的另一种使用方式,通过BAR访问get_bar obj = Foo()
result = obj.BAR
print result 结果为:
charles

注意:不管是经典类还是新式类都可以使用装饰器

其他装饰器:(只在新式类中使用)

class Goods(object):
@property
def price(self):
print "@property" @price.setter
def price(self,value):
print "@price.setter" @price.deleter
def price(self):
print "@price.deleter" ##############调用################### obj = Goods() obj.price #自动执行@proproty修饰的方法,并获取返回值
print obj.price obj.price = #自动执行@price.setter修饰的price方法,将123赋值给方法的返回值 print obj.price del obj.price #自动执行@price.deleter修饰的price方法 print obj.price
结果为:
E:\python\python.exe E:/python_scripts/11S_07day/index1.py
@property
@property
None @property
None

七、面向对象类成员修饰符

所有__开头的都表示是私有,不可以直接访问

class Foo(object):
__country = "China" #私有静态字段,无法直接访问 def __init__(self):
self.__name = "Charles" #私有普通字段 def __foo(self): #私有普通方法
print "foo" @staticmethod
def __fat(): #私有静态方法
print "fat" def func(self):
print Foo.__country #可以间接访问
print self.__name
self.__foo()
Foo.__fat()
obj = Foo()
obj.func() 结果为:
E:\python\python.exe E:/python_scripts/11S_07day/index1.py
China
Charles
foo
fat

那么对于继承呢?

class Foo(object):
__county = "China" def __init__(self):
self.__name = "Charles" def func(self):
print Foo.__county #class Son(Foo):
# def show(self):
#print Foo.__county #子类无法访问主类的私有字段或方法,这种方法不对
#s = Son()
#s.show() obj = Foo()
print obj._Foo__name #如果非要访问,可以用这种方式,但是极为不推荐这种方式

  

总结:

1、面向对象三大特性

2、python、封装

a、多个方法公用一组变量,变量封装到变量中

b、游戏

3、继承

a、基类、派生类

b、多继承

c、新式类、经典类

d、广度优先、深度优先

4、类、对象内存的图

5、类成员

a、字段:普通、静态

b、方法

普通方法  对象  参数至少一个self,self=当前对象

类方法         类        只有一个cls,cls=当前类

静态方法      类        任意参数

c、属性:方法的变种,变成访问时字段相似

 @property

    Data=property(方法名)

@property

    @方法名:setter

    @方法名:deleter

八、类特殊方法

__doc__

__call__

class Foo(object):
"""
audgsdksadhkashd """
__country = "China" def __init__(self):
self.name = "Charles"
self.age = 22 def __call__(self, *args, **kwargs):
print "call" def get_name(self):
return self.__name
obj = Foo() #类加()执行__init__方法
obj() #对象加()执行__call__方法 Foo()()
print obj.__doc__
print obj.__dict__ #查看类中的字段有哪些,放入字典中
print Foo.__dict__ ###########################
E:\python\python.exe E:/python_scripts/11S_07day/index1.py
call
call audgsdksadhkashd {'age': 22, 'name': 'Charles'}
{'__dict__': <attribute '__dict__' of 'Foo' objects>, '__module__': '__main__', '_Foo__country': 'China', '__init__': <function __init__ at 0x0212A7F0>, '__call__': <function __call__ at 0x0212A770>, '__weakref__': <attribute '__weakref__' of 'Foo' objects>, '__doc__': '\n audgsdksadhkashd\n\n ', 'get_name': <function get_name at 0x0212A730>}

__str__

class Foo(object):
"""
audgsdksadhkashd """
__country = "China" def __init__(self):
self.name = "Charles"
self.age = 22 def __call__(self, *args, **kwargs):
print "call" def get_name(self):
return self.__name
obj = Foo()
print obj 结果为:
<__main__.Foo object at 0x02159A30> #返回的是内存地址 如果加__str__函数 class Foo(object):
"""
audgsdksadhkashd """
__country = "China" def __init__(self):
self.name = "Charles"
self.age = 22 def __str__(self):
return "QQ" def __call__(self, *args, **kwargs):
print "call" def get_name(self):
return self.__name obj = Foo()
print obj 结果为:
QQ

  

九、使用反射访问、设置类的属性(一般用不到,只有在一些框架中才会使用得到)

>>> class A:
... a = 0
... def __init__(self):
... self.a=10
... self.b=100
...
...
...
>>>
>>>
>>> a = A() >>> getattr(a,'a')
10
>>> setattr(a,'a',20) #设置属性
>>> getattr(a,'a')
20 >>> hasattr(a,'b') #判断有无属性
True

  

十、属性包装(让类的方法包装为属性)

一般属性包装使用装饰器实现,比如property(可读),  .setter(可写)和.delete(删除)等

class Washer:

    def __init__(self,water=10,scour=2):
self._water=water
self._scour=scour
self.year=2010 @property
def water(self): #将方法封装为属性
return self._water @water.setter
def water(self,water):
if 0<water <=500:
self._water = water
else:
print "set Failure!" @property
def total_water(self):
return 2015-self.year if __name__ == '__main__':
w = Washer()
print w.water
w.water= -123
print w.water #直接通过访问属性的方式访问方法
print w.total_water

  

random、面向对象编程的更多相关文章

  1. Python之路【第五篇】:面向对象编程

    面向对象编程思维导向图

  2. C#面向对象编程基础-喜课堂笔记

    **************[5][C#面向对象编程基础]第1讲:类与对象****************                 *************2.1.1_类与对象的概念**** ...

  3. 《JavaScript面向对象编程指南(第2版)》读书笔记(二)

    <JavaScript面向对象编程指南(第2版)>读书笔记(一) <JavaScript面向对象编程指南(第2版)>读书笔记(二) 目录 一.基本类型 1.1 字符串 1.2 ...

  4. java 面向对象编程。。。。

    经过一周的学习(java),总结了许多,对java的理解,java的类型,运用,安装,基础语法,变量,常量,表达式,语句 java从C语言中继承了大量语言特性.java面向对象编程的基本特征,包括继承 ...

  5. 页面循环绑定(变量污染问题),js面向对象编程(对象属性增删改查),js字符串操作,js数组操作

    页面循环绑定(变量污染问题) var lis = document.querySelectorAll(".ul li") for ( var i = 0 ; i < lis. ...

  6. JavaScript面向对象编程[转]

    JavaScript面向对象编程 命名空间 命名空间是一个容器,它允许开发人员在一个独特的,特定于应用程序的名称下捆绑所有的功能. 在JavaScript中,命名空间只是另一个包含方法,属性,对象的对 ...

  7. Java基础-初识面向对象编程(Object-Oriented-Programming)

    Java基础-初识面向对象编程(Object-Oriented-Programming) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Java是一门面向对象的程序设计语言.那么什 ...

  8. js面向对象编程-高级内容

    JavaScript面向对象 一.为每个对象动态添加属性或方法 功能:返回对象类型原型的引用 prototype的使用 格式:class.prototype 场景: 比如说:A写了一个类,交给B,B在 ...

  9. JavaScript面向对象编程小游戏---贪吃蛇

    1 面向对象编程思想在程序项目中有着非常明显的优势: 1- 1 代码可读性高.由于继承的存在,即使改变需求,那么维护也只是在局部模块 1- 2 维护非常方便并且成本较低. ​ 2 这个demo是采用了 ...

  10. Day07:常用模块,面向对象编程(对象&类)及内置函数

    今日内容:1.常用模块2.面向对象编程(*****)    介绍面向对象编程    类    对象3.内置函数------------------------------1.面向过程编程    核心“ ...

随机推荐

  1. IP的包头格式什么?请分析每个字段的含义

    Version:版本号 Header Length:IP包头长度 Type of service:服务类型 Total Length:IP包总长 Identifier:标识符 Flags:标记 Fra ...

  2. Couldn't open file on client side, trying server side 错误解决

    09-09 09:43:21.651: D/MediaPlayer(3340): Couldn't open file on client side, trying server side09-09 ...

  3. UIControlEventTouch

    在控件事件中,简单解释下下面几个事件. 说明:由于是在“iOS 模拟器”中测试的,所以不能用手指,只能用鼠标. 1)UIControlEventTouchDown 指鼠标左键按下(注:只是“按下”)的 ...

  4. codeforces195a

    link:http://codeforces.com/problemset/problem/336/A 很简单的一道题目,当初有个单词不认识,isosceles原来意思是等腰的o(╯□╰)o #inc ...

  5. [NOIP2009] 靶形数独(搜索+剪枝)

    题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, Z 博士拿出了他最近发明的 ...

  6. 怎么 才能显示Eclipse中Console的全部内容

    可以如下设置 preference->run/debug->console 设置limit console output 为false,方便调试时,查看全部console. 这个真是太有用 ...

  7. Alpha版本——Postmortem会议

    No Bug 031402401鲍亮 031402402曹鑫杰 031402403常松 031402412林淋 031402418汪培侨 031402426许秋鑫 设想和目标 1.我们的软件要解决什么 ...

  8. 基于Open vSwitch搭建虚拟路由器

    As part of my work in OpenDaylight, we are looking at creating a router using Open vSwitch... Why? W ...

  9. LVS+Keepalived负载均衡配置

    简介 lvs一般是和keepalived一起组合使用的,虽然也可以单独使用lvs,但配置比较繁琐,且可用性也没有前者高. lvs和keepalived组合使用后,配置lvs的VIP和负载均衡就都在ke ...

  10. python---str

    Python转义字符 \ (在行尾时) 续行符 \\ 反斜杠符号 \' 单引号 \" 双引号 \a 响铃 \b 退格(Backspace) \e 转义 \000 空 \n 换行 \v 纵向制 ...