python基础七

调用自己写的模块

首先在同一目录下创建两个py文件,比如我一个名字为Demo.py一个为Test.py文件

Test.py代码:

print('我是Test.py')

def Getstr():

    print('我是Getstr方法')

如果我想在Demo中调用Test该怎么办呢?(可能你大概已经猜到)

Demo代码:

import Test

#运行会输出:我是Test.py

可以看到调用Test模块就会执行输出我是Test.py

那如果我多次导入会不会多次输出呢?答案显然不是

因为当我们导入模块的时候,会在内存中(sys.modules)查找是否有这个模块,存在不添加,不存在添加。

注意:我们导入模块时,会现在本地文件中查找该模块,再去系统变量中查找也就是说如果我们将本地py文件的命名修改成上篇文章的任意一个,再去使用它就会报错。

如果我想要调用Test中的Getstr方法呢?

Demo代码:

import Test

Test.Getstr()即可。

输出:我是Test.py

      我是Getstr方法

给模块起别名:as

为什么起别名?模块名字很长?怎么可能。例如

import Test as t

我们想一个问题,如果两个模块都拥有同一个方法。

我们可不可以给一个相同的别名?

如上我们发现我们每次调用Test的方法或者参数,都会使用Demo.xxx

可以不可以直接调用方法呢?

例如:from Test import Getstr 或者from Test import * # *:表示所有

      #调用Getstr方法

      Getstr()

对于*(只针对*):

当我们导入Test下的所有方法和变量时如果我不想给Demo用该怎么办?

我们可以在Test.py文件中添加:

__all__=['Getstr']

def Getstr2():

    print('我是Getstr2')

此时,在Demo中调用Getstr2()就会报错,不给他用。

如果想给他用加上就好:

__all__=['Getstr','Getstr2']

导入的另一种方式:.

我们经常看见 from xxx.xxx.xxx import xxx

.的左边必须是包,也就是文件夹,导入其他文件夹下的py文件,import后不能有点

同时也可以一次导入多个:

from Test import Getstr,Getstr2

以上我们还发现每次调用Test的时候都会输出我是Test.py

如果我们想只执行Test的时候执行'我是Test.py'这句话,而在其他文件调用的时候不执行怎么办?

只需要将print('我是Test.py')删除写成这样:

if __name__ == '__main__':

    print('我是Test.py')

可以猜到这个if判断就是判断是否执行的当前文件吧。

__init__文件:

我们使用pycharm软件创建一个包时都会有一个__init__文件,当我们只导入包的时候,会执行__init__文件,和上面的一个道理也就是说我们导入包和导入模块的时候,都会有一个相当于加载事件,当调用的时候就会执行。

异常处理

#try: 可能出现错误的代码

#except:当发生错误执行的代码,可以写多个except,根据错误类型执行代码,也可以捕捉所有错误,并提示

例如:

    try:

        int('qwe')

    except Exception:

        print('出现错误')

    else:

        print('1111')

    finally:

        print('12345645498')  

Exception:是捕捉所有的错误。

else:是没有报错的时候执行  

finally:不管报错不报错都执行的代码

其他错误:

BaseException:所有异常的基类

SystemExit:解释器请求退出

KeyboardInterrupt:用户中断执行(通常是输入^C)

Exception:常规错误的基类

StopIteration:迭代器没有更多的值

GeneratorExit:生成器(generator)发生异常来通知退出

SystemExit:Python 解释器请求退出

StandardError:所有的内建标准异常的基类

ArithmeticError:所有数值计算错误的基类

FloatingPointError:浮点计算错误

OverflowError:数值运算超出最大限制

ZeroDivisionError:除(或取模)零 (所有数据类型)

AssertionError:断言语句失败

AttributeError:对象没有这个属性

EOFError:没有内建输入,到达EOF 标记

EnvironmentError:操作系统错误的基类

IOError:输入/输出操作失败

OSError:操作系统错误

WindowsError:系统调用失败

ImportError:导入模块/对象失败

KeyboardInterrupt:用户中断执行(通常是输入^C)

LookupError:无效数据查询的基类

IndexError:序列中没有没有此索引(index)

KeyError:映射中没有这个键

MemoryError:内存溢出错误(对于Python 解释器不是致命的)

NameError:未声明/初始化对象 (没有属性)

UnboundLocalError:访问未初始化的本地变量

ReferenceError:弱引用(Weak reference)试图访问已经垃圾回收了的对象

RuntimeError:一般的运行时错误

NotImplementedError:尚未实现的方法

SyntaxError:Python语法错误

IndentationError:缩进错误

TabError:Tab和空格混用

SystemError:一般的解释器系统错误

TypeError:对类型无效的操作

ValueError:传入无效的参数

UnicodeError:Unicode 相关的错误

UnicodeDecodeError:Unicode 解码时的错误

UnicodeEncodeError:Unicode 编码时错误

UnicodeTranslateError:Unicode 转换时错误

Warning:警告的基类

DeprecationWarning:关于被弃用的特征的警告

FutureWarning:关于构造将来语义会有改变的警告

OverflowWarning:旧的关于自动提升为长整型(long)的警告

PendingDeprecationWarning:关于特性将会被废弃的警告

RuntimeWarning:可疑的运行时行为(runtime behavior)的警告

SyntaxWarning:可疑的语法的警告

UserWarning:用户代码生成的警告

面向对象

定义一个类

class Person:

    gamename = '人类'

    def __init__(self,*args):

        print('正在定义属性。。。')

        self.name = args[0]

        self.age = args[1]

        self.sex = args[2]

    def Getwrite(self):

        print(self.name,self.age,self.sex)

person = Person('张三',18,'男') # 实例化

person.Getwrite() # 张三 18 男

print(person.name) # 张三

print(person.__dict__) # {'name': '张三', 'age': 18, 'sex': '男'} 返回的是一个字典,你也可以这样person.__dict__['name']

Person:类名,可以自己定义

gamename:静态属性,不会改变  但是调用用类名调用

__init__:当实例化Person 会执行的函数 #实例化就会输出:正在定义属性。。。

self: self变量,可以看作包含所有属性的字典

*args:参数

实例化的参数会在__init__中接收

类是抽象的,他只负责定义一些属性和功能,经过实例化之后变成对象。

反过来 import 一个模块的过程就是一个实例化的过程

另:类是可以当作一个属性传入到另一个类中的。

面向对象之封装,继承,多态

继承:#为什么继承?提高代码的精简度,把公共的部分写在父类中,子类继承即可。

class Father:

    pass

class Mother:

    pass

# 单继承

class Son(Father):

    pass

# 多继承 python特有的

class Daughter(Father,Mother):

    pass

如上:Son类继承Father类,Daughter类继承Father类和mother类。

我们把Father,Mother叫父类或基类或超类

Son,Daughter类叫做子类或派生类

查看该类的父类:__base__

例如查看Son的父类:

print(Son.__base__)

print(Father.__base__) # 所有没有继承的类继承object类

当我们想要的子类中有和父类想相同的方法既要调用自己的方法,也要执行父类的方法需要用到super

实例:

class Father:

    def GetName(self):

        print('我是Father类的GetName方法')

class Son(Father):

    def GetName(self):

        print('我是Son类的GetName方法')          

s = Son()

s.GetName() 

如上只会输出:我是Son类的GetName方法 

如果两个都想输出可以这样:

class Father:

    def GetName(self):

        print('我是Father类的GetName方法')

class Son(Father):

    def GetName(self):

        super().GetName()

        print('我是Son类的GetName方法')

    Def GetAge(self):

        print('18')

s = Son()

s.GetName() 

就会输出:

我是Father类的GetName方法

我是Son类的GetName方法

当一个类多继承时候在python3中遵循广度优先的原则,在python2.7中遵守深度优先的原则

多态:

一个方法表现的不同形式:

class A:

    def write(self):

        print('A')

class B:

    def write(self):

        print('B')

class C:

    def write(self):

        print('C')

def test(obj):

    obj.write()

a = A()

b = B()

c = C()

test(a)   

test(b) 

test(c) 

输出 A B C

封装:

封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容。 

对于面向对象的封装来说,其实就是使用构造方法将内容封装到 对象 中,然后通过对象直接或者self间接获取被封装的内容。

class Getstr:

    def __init__(self,name,age):

        self.name = name

        self.age = age

    def Getname(self):

        print('我的名字是:%s'%self.name)

    def GetAge(self):

        print('我的年龄是:%s'%self.age)

s = Getstr('张三',18)

s.GetName()

s.GetAge()

输出:

我的名字是:张三

我的年龄是:18

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容