zoukankan      html  css  js  c++  java
  • python类

    python类

    1. 类级别的变量
    # 创建类
    class Foo:
        # 这里我们可以创建一个类级别的变量
        # 它不会随着由此类创建的变量而变化
        name = 'Jan'
        
        def bar(self):
            print('Bar')
     
        def hello(self, name):
            print('you are %s' %self.name)
            print('I am %s' %name)
            print('
    ')
     
    # 根据Foo创建的对象
    obj1 = Foo()
    obj2 = Foo()
    obj1.hello('August')
    obj2.hello('July') 
    

    输出结果:

    you are Jan
    I am August
    
    you are Jan
    I am July
    
    • self是个代指。代指了自己所在的class。你可以由 self 点进所指class本身的函数。由此可见,self 本身作为一个代词,并不一定要叫self。你也可以用个其他什么来代替。只不过,必须得是这个类的所有子方法的第一个参数:
    • self.name指类中的Jan

    类属性和实例属性

    由于Python是动态语言,根据类创建的实例可以任意绑定属性。
    给实例绑定属性的方法是通过实例变量,或者通过self变量:

    2.1 实例属性

    class Student(object):
        def __init__(self, name):
            self.name = name
    
    s = Student('Bob')
    s.score = 90
    
    

    score是实例属性

    实例属性优先级高于类属性

    # -*-coding:utf-8 —*—
      
    class Student(object):
        name = 'Student'
    
    s = Student() # 创建实例s
    print(s.name) # 打印name属性,因为实例并没有name属性,所以会继续查找class的name>属性
    
    s.name = 'Michael' # 给实例绑定name属性
    print(s.name) # 由于实例属性优先级比类属性高,因此,它会屏蔽掉类的name属性
    print(Student.name)
    
    

    输出结果为:

    Student
    Michael
    Student
    
    
    • 从上面的例子可以看出,在编写程序的时候,千万不要把实例属性和类属性使用相同的名字,因为相同名称的实例属性将屏蔽掉类属性,但是当你删除实例属性后,再使用相同的名称,访问到的将是类属性。

    构造函数__init__()的参数

    模块和包

    模块:在python中一个文件可以被看成1个独立模块,模块把python代码分成一些有组织的代码段,通过导入的方式实现代码重用。

    包:对应着文件夹,包必须至少含有一个__int__.py文件按,该文件的内容可以为空。int.py用于标识当前文件夹是一个包。

    • 包将有联系的模块组织在一起,有效避免模块名称冲突问题,让应用组织结构更加清晰。 一个普通的python应用程序目录结构:
    app/
    __init__.py
    a/
    __init__.py
    a.py
    b/
    __init__.py
    b.py
    

    app是最顶层的包,a和b是它的子包,可以这样导入:

    from app.a import a
    from app.b.b import test
    
    a.test()
    test()
    

    reload():用于重新载入之前载入的模块,使得多次导入都有效

    reload() 函数语法:reload(module)

    • 为了防止被import的模块修改之后因之一次导入而使得修改不起作用而存在

    开启一个交互对话,创建一个如下文件script.py:

    #-*-coding:utf-8 -*-
    import sys
    print sys.platform
    print 2**100
    x='spam'
    print x*8
    

    在命令行中运行,结果如下:

    >>> import scripy
    darwin
    1267650600228229401496703205376
    spamspamspamspamspamspamspamspam
    >>> import scripy
    >>> 
    
    

    也即每次交互,只有第一次导入有效,因为,默认情况下,只有在每次会话的第一次运行,第一次导入之后,其他的导入都不会再工作,甚至对模块内容的修改也仍然不会工作。只有推出交互后重新建立一次交互再导入才可以(这多麻烦呀)

    • 因为导入是开销很大的操作,

    为解决导入问题,要在同一次会话中多次运行文件,需引入reload()

    >>> import scripy
    darwin
    1267650600228229401496703205376
    spamspamspamspamspamspamspamspam
    >>> reload(scripy)
    darwin
    1267650600228229401496703205376
    spamspamspamspamspamspamspamspam
    <module 'scripy' from 'scripy.pyc'>
    >>> 
    
  • 相关阅读:
    简单说说数据库表设计的三种范式
    存储过程简单的动态订单号
    Asp.Net页面生命周期
    jq 小笔记,上传判断其格式
    吃一垫长一智
    离散事件模拟
    二叉树查找树
    冷暖自知
    基督徒的人生箴言
    迷宫寻路
  • 原文地址:https://www.cnblogs.com/monkey-moon/p/9385823.html
Copyright © 2011-2022 走看看