模块的定义

代码的层次结构

  • 对于python的层次结构一般为包->模块
  • 包也就是文件夹,但是文件夹下必须有文件"init.py"那么此文件夹才可以被识别为包。"init.py"文件可以为空,也可以不为空。不为空的情况以后详细写
  • 模块其实就是.py文件

类的基础

基本概念

在模块中定义一个类,类的最基本结构如下:

#对于模块的说明
'a test module'
#作者
__author__ = 'liyue' #定义一个类名称为ClassDemo,继承类顶级类object
class ClassDemo(object):
#定义一个类的成员函数
def sayHello(x):
print("Hello:%s" % x) #下面的代码有两个作用:
# 1.调试或者执行当前文件,也就是ClassDemo时候,那么会执行下面代码
# 2.如果是其他文件调用当前文件,那么下面代码避免当前文件重复执行'''
if __name__ == "__main__":
#测试本文件
ClassDemo.sayHello('li')

类的调用

下面演示了怎么调用另一个模块的类:

#对于模块的说明
'a demo of call class'
#作者
__author__ = 'liyue' #导入其他模块有两种写法:
# import modulename.classname as 别名
# from moudlename imprt classname as 别名 #import FunctionDemo.ClassTest as ct
from FunctionDemo import ClassTest as ct class ClassCall:
def testMain():
#将当前的类名称传入
funInstance = ct.ClassDemo()
funInstance.sayHello()
#普通的调用传入
ct.ClassDemo.sayHello('ClassCall') if __name__ == '__main__':
#调用模块ClassTest的类
ClassCall.testMain()

在这里要注意对于import的两种方式使用细节。在python中重要关键字都是用两个下划线作为标志,要注意写法且自己定义时候不能重名。

变量的作用域

  • 使用单下划线作为前缀的变量:_XXX表明这是一个私有的变量。
  • 这个私有的作用主要是用于编码规范,不能完全防止访问此变量。例如可以通过_classname_XXX的方式,且此此方式不是固定的。
  • 对于变量的访问最好通过函数封装来完成

    python的Syntactic sugar是需要特别注意的,一个函数没有入参,那么调用时候隐含了一个入参也就是self。也就是说对于一个函数:
def fun(paraA);
pass

其真实的声明是这样的:

def fun(self, paraA):
pass

上述内容代码:

#对于模块ClassTest.py的说明
'a test module'
#作者
__author__ = 'liyue' #定义一个类名称为ClassDemo,继承类顶级类object
class ClassDemo(object):
#定义一个类的成员函数
def sayHello(x):
print("Hello:%s" % x) name = ''
_age = 0 #定义一个初始化函数
def __init__(self, name, age):
self.name = name
self._age = age #定义私有函数
def getterName(self):
return self.name
def _getterAge(self):
return self._age def pintNameAndAge(self):
print('Name is:%s Age is:%s' % (self.getterName(), self._getterAge())) #下面的代码有两个作用:
# 1.调试或者执行当前文件,也就是ClassDemo时候,那么会执行下面代码
# 2.如果是其他文件调用当前文件,那么下面代码避免当前文件重复执行'''
if __name__ == "__main__":
#测试本文件
ClassDemo.sayHello('li') #测试函数的封装
cd = ClassDemo('zhangsan', 20)
cd.pintNameAndAge()

对象信息

  • 可以用type来获取对象信息,type的返回值是类
  • 对于有继承关系的类而言用isInstance判断,所以通常用isInstance即可
#对于模块Animal.py的说明
'a demo of class type'
#作者
__author__ = 'liyue' class Animal(object):
pass class Dog(Animal):
pass class Cat(Animal):
pass class PrintInfo(object):
def testMain():
a = Animal()
d = Dog()
c = Cat()
print('Animal and Dog isInstance: %s' % isinstance(Animal, Dog))
print('a and Dog Animal: %s' % isinstance(a, Animal)) print("c's type is: %s" % type(c)) if __name__ == '__main__':
PrintInfo.testMain()

实例属性和类属性

#对于模块Animal.py的说明
'a demo of class type'
#作者
__author__ = 'liyue' class Animal(object):
name = 'an animal' class PrintInfo(object):
def testMain():
a = Animal()
#没有绑定新的类属性,输出默认值
print(a.name)
#给实例绑定了类属性,输出实例的类属性值
a.name = 'a dog'
print(a.name)
#类本身的属性值不变
print(Animal.name)
#删除实例绑定的类属性值
del a.name
#此时又输出默认的值
print(a.name) if __name__ == '__main__':
PrintInfo.testMain()

Python模块和类.md的更多相关文章

  1. 孤荷凌寒自学python第四十六天开始建构自己用起来更顺手一点的Python模块与类尝试第一天

     孤荷凌寒自学python第四十六天开始建构自己用起来更顺手一点的Python模块与类,尝试第一天 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 按上一天的规划,这是根据过去我自学其它编程语 ...

  2. python模块和类的通用转换规则(2),三步转oo

    介绍模块和类怎么互相转换,不谈面向对象的继承 封装 多态等特点. 一个person_module模块,有人的基本属性和功能. person_module.py如下 # coding=utf8 name ...

  3. Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函数 os模块 hashlib模块 platform模块 csv模块

    Python第十一天    异常处理  glob模块和shlex模块    打开外部程序和subprocess模块  subprocess类  Pipe管道  operator模块   sorted函 ...

  4. 【Python基础】lpthw - Exercise 40 模块、类和对象

    一. 模块(module) 模块中包含一些函数和变量,在其他程序中使用该模块的内容时,需要先将模块import进去,再使用.操作符获取函数或变量,如 # This goes in mystuff.py ...

  5. python模块之HTMLParser(原理很大程度上就是对类构造的熟练运用)

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #python模块之HTMLParser(原理很大程度上就是对类构造的熟练运用) import HTMLPar ...

  6. python附录-builtins.py模块str类源码(含str官方文档链接)

    python附录-builtins.py模块str类源码 str官方文档链接:https://docs.python.org/3/library/stdtypes.html#text-sequence ...

  7. python的WeakKeyDictionary类和weakref模块的其他函数

    python的WeakKeyDictionary类和weakref模块的其他函数 # -*- coding: utf-8 -*- # @Author : ydf # @Time : 2019/6/13 ...

  8. python之模块、类、对象

    模块就像字典 字典是python中唯一映射关系,它用一个事物对应另外一个事物,也就是所谓的key->value. 模块包含一些变量和函数,可以导入,并且可以用点(·)来操作访问变量和函数. 记住 ...

  9. Python 3 快速入门 3 —— 模块与类

    本文假设你已经有一门面向对象编程语言基础,如Java等,且希望快速了解并使用Python语言.本文对重点语法和数据结构以及用法进行详细说明,同时对一些难以理解的点进行了图解,以便大家快速入门.一些较偏 ...

随机推荐

  1. C# 中使用锁防止多线程冲突

    在编程的时候经常会用到多线程,有时候如果多线程操作同一个资源就会导致冲突,.NET提供了多种方法来防止冲突发生,这里讲下Mutex 该类位于System.Threading命名空间,常用的方式是这样: ...

  2. react mobx webpack 使用案例

    1.package.json: { "name": "wtest", "version": "1.0.0", " ...

  3. 常用正则表达式—邮箱(Email)

    本文针对有一点正则基础的同学,如果你对正则一无所知,请移步“正则表达式30分钟入门教程”学习.  要验证一个字符串是否为邮箱的话,首先要了解邮箱账号的格式.我尝试过在网上找出一个标准的格式,但是很遗憾 ...

  4. 查看linux文件目录的大小和文件夹包含的文件数

    du -h --max-depth=|sort -n du -h --max-depth=|grep G|sort -n df -h 清理/var/log # 清除 # 一定要以root身份来运行这个 ...

  5. three.js学习:纹理Texture之平面纹理

    index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  6. spring boot整合quartz实现多个定时任务

        版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/liuchuanhong1/article/details/78543574 最近收到了很多封邮件, ...

  7. Python——列表深浅拷贝

    一.深浅拷贝 如果希望将列表复制一份,通过列表的内置方法copy就可以实现: s = [[1,2],3,4] s1 = s.copy() print(s) print(s1) 拷贝出的列表s1与原列表 ...

  8. python生成器异步使用

    import dis,time # 反汇编 import threading def request(): print('start request') v = yield print(v) def ...

  9. [Unity插件]Lua行为树(八):行为节点扩展

    先看一下之前的行为节点是怎么设计的: BTAction.lua BTAction = BTTask:New(); local this = BTAction; this.taskType = BTTa ...

  10. 34.纯 CSS 创作在文本前后穿梭的边框

    原文地址: https://segmentfault.com/a/1190000015045700 感想: 动画  +  z-index:n   ; HTML code: <div class= ...