zoukankan      html  css  js  c++  java
  • Python模块和类.md

    模块的定义

    代码的层次结构

    • 对于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()
    
    
  • 相关阅读:
    Kibana安装
    elasticsearch安装
    分布式_zookeeper
    通信协议_三次握手_四次挥手
    Spring中的IOC_源码_随笔
    Spring设计模式_策略模式/其他
    Spring设计模式_工厂模式
    spring设计模式_代理模式
    docker常用指令01
    ubuntu18下安装docker
  • 原文地址:https://www.cnblogs.com/bugstar/p/7994025.html
Copyright © 2011-2022 走看看