面向对象和模块

Posted 韩晓飞

tags:

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

类的相关知识

类有两种作用:属性引用和实例化

属性引用(类名.属性)

 class Person:   #定义一个人类

    role = \'person\'  #人的角色属性都是人
    def walk(self):  #人都可以走路,也就是有一个走路方法
        print("person is walking...")
实例化:类名加括号就是实例化,会自动触发__init__函数的运行,可以用它来为每个实例定制自己的特征
class Person:   #定义一个人类
    role = \'person\'  #人的角色属性都是人
    def __init__(self,name):
        self.name = name  # 每一个角色都有自己的昵称;
         
    def walk(self):  #人都可以走路,也就是有一个走路方法
        print("person is walking...")
实例化的过程就是类——>对象的过程

关于self

self:在实例化时自动将对象/实例本身传给__init__的第一个参数

面向对象三大特征

1.继承

什么是继承

  继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类

python中类的继承分为:单继承和多继承

继承与抽象(先抽象再继承)

抽象最主要的作用是划分类别(可以隔离关注点,降低复杂度)

继承:是基于抽象的结果,通过编程语言去实现它,肯定是先经历抽象这个过程,才能通过继承的方式去表达出抽象的结构。

抽象只是分析和设计的过程中,一个动作或者说一种技巧,通过抽象可以得到类

2多态

多态指的是一类事物有多种形态

动物有多种形态:人,狗,猪

import abc
class Animal(metaclass=abc.ABCMeta): #同一类事物:动物
    @abc.abstractmethod
    def talk(self):
        pass
 
class People(Animal): #动物的形态之一:人
    def talk(self):
        print(\'say hello\')
 
class Dog(Animal): #动物的形态之二:狗
    def talk(self):
        print(\'say wangwang\')
 
class Pig(Animal): #动物的形态之三:猪
    def talk(self):
        print(\'say aoao\')

多态性分为静态多态性和动态多态性

  静态多态性:如任何类型都可以用运算符+进行运算

  动态多态性:如下

peo=People()
dog=Dog()
pig=Pig()
 
#peo、dog、pig都是动物,只要是动物肯定有talk方法
#于是我们可以不用考虑它们三者的具体是什么类型,而直接使用
peo.talk()
dog.talk()
pig.talk()
 
#更进一步,我们可以定义一个统一的接口来使用
def func(obj):
    obj.talk
 
3封装
 
将对象的数据与操作数据的方法相结合,通过方法将对象的数据与实现细节保护起来,就称为封装。外界只能通过对象的方法访问对象,因此封装同时也实现了对象的数据隐藏。
在使用面向对象的封装特性时,需要:将内容封装到某处,和从某处调用被封装的内容
类中的self 是一个形式参数,当执行 obj1 = Foo(\'wupeiqi\', 18 ) 时,self 等于 obj1当执行 obj2 = Foo(\'alex\', 78 ) 时,self 等于 obj2所以,内容其实被封装到了对象 obj1 和 obj2 中,每个对象中都有 name 和 age属性,在内存里类似于下图来保存
2、property方法
#coding=utf-8
import os
class Person(object):
def __init__(self,name):
self.Name = name
def getName(self):
print \'fetch...\'
return self.Name
def setName(self, name):
print \'change...\'
self.Name = name
def delName(self):
print \'remove...\'
del self.Name
name = property(getName,setName,delName,\'name property
docs\')
# name=property(getName,setName)
bob = Person(\'Bob Smith\')
print bob.name
bob.name = \'Robert Smith\'
print bob.name
del bob.name
通过property方法可以把类对象变量(self.Name)的获取、修改和删除方法自动影射到类变量(bob.name)的三种行为
 

模块总结

时间模块

time与datetime

python中常见的时间表示方法:

a. 时间戳

时间戳:从1970年1月1日00:00:00到现在为止一共的时间数(单位为秒)

>>> time.time()

b. 格式化的时间字符串

c. struct_time(元组)

相互之间的转换关系如下:

datetime

当前时间:datetime.datetime.now()

随机模块random

random.randint(1,3)则可以取出随机1-3

random.randrange(1,3)随机从范围内所及

random.choice()传递的参数是序列包括字符串列表等

os模块

os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
 2 os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd
 3 os.curdir  返回当前目录: (\'.\')
 4 os.pardir  获取当前目录的父目录字符串名:(\'..\')
 5 os.makedirs(\'dirname1/dirname2\')    可生成多层递归目录
 6 os.removedirs(\'dirname1\')    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
 7 os.mkdir(\'dirname\')    生成单级目录;相当于shell中mkdir dirname
 8 os.rmdir(\'dirname\')    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
 9 os.listdir(\'dirname\')    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
10 os.remove()  删除一个文件
11 os.rename("oldname","newname")  重命名文件/目录
12 os.stat(\'path/filename\')  获取文件/目录信息
13 os.sep    输出操作系统特定的路径分隔符,win下为"\\\\",Linux下为"/"
14 os.linesep    输出当前平台使用的行终止符,win下为"\\t\\n",Linux下为"\\n"
15 os.pathsep    输出用于分割文件路径的字符串
16 os.name    输出字符串指示当前使用平台。win->\'nt\'; Linux->\'posix\'
17 os.system("bash command")  运行shell命令,直接显示
18 os.environ  获取系统环境变量
19 os.path.abspath(path)  返回path规范化的绝对路径
20 os.path.split(path)  将path分割成目录和文件名二元组返回
21 os.path.dirname(path)  返回path的目录。其实就是os.path.split(path)的第一个元素
22 os.path.basename(path)  返回path最后的文件名。如何path以/或\\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
23 os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False
24 os.path.isabs(path)  如果path是绝对路径,返回True
25 os.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回False
26 os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False
27 os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
28 os.path.getatime(path)  返回path所指向的文件或者目录的最后存取时间
29 os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间

 sys模块

 sys.argv           命令行参数List,第一个元素是程序本身路径
2 sys.exit(n)        退出程序,正常退出时exit(0)
3 sys.version        获取Python解释程序的版本信息
4 sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
5 sys.platform       返回操作系统平台名称
6 sys.stdout.write(\'please:\')

  shutil模块

import shutil
2 
3 a = open("a.txt","r",encoding="utf-8")
4 b = open("b.txt","w",encoding="utf-8")
5 
6 shutil.copyfileobj(a,b)

  用于序列化的两个模块json&pickle

json,用于字符串 和 python数据类型间进行转换

pickle,用于python特有的类型 和 python的数据类型间进行转换

Json模块提供了四个功能:dumps、dump、loads、load

pickle模块提供了四个功能:dumps、dump、loads、load

re模块

1 \'.\'     默认匹配除\\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行
 2 \'^\'     匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","\\nabc\\neee",flags=re.MULTILINE)
 3 \'$\'     匹配字符结尾,或e.search("foo$","bfoo\\nsdfsf",flags=re.MULTILINE).group()也可以
 4 \'*\'     匹配*号前的字符0次或多次,re.findall("ab*","cabb3abcbbac")  结果为[\'abb\', \'ab\', \'a\']
 5 \'+\'     匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果[\'ab\', \'abb\']
 6 \'?\'     匹配前一个字符1次或0次
 7 \'{m}\'   匹配前一个字符m次
 8 \'{n,m}\' 匹配前一个字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 结果\'abb\', \'ab\', \'abb\']
 9 \'|\'     匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 结果\'ABC\'
10 \'(...)\' 分组匹配,re.search("(abc){2}a(123|456)c", "abcabca456c").group() 结果 abcabca456c
11  
12  
13 \'\\A\'    只从字符开头匹配,re.search("\\Aabc","alexabc") 是匹配不到的
14 \'\\Z\'    匹配字符结尾,同$
15 \'\\d\'    匹配数字0-9
16 \'\\D\'    匹配非数字
17 \'\\w\'    匹配[A-Za-z0-9]
18 \'\\W\'    匹配非[A-Za-z0-9]
19 \'s\'     匹配空白字符、\\t、\\n、\\r , re.search("\\s+","ab\\tc1\\n3").group() 结果 \'\\t\'

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

 

 

 
 
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
 
 
 
 
 
 
 

 

以上是关于面向对象和模块的主要内容,如果未能解决你的问题,请参考以下文章

C++作为面向对象语言的三个基本特征:封装,继承和————

面向对象编程

Python面向对象编程和模块

PHP面向对象之选择工厂和更新工厂

python 模块和包   面向对象

js面向对象的三大特性