码迷,mamicode.com
首页 > 编程语言 > 详细

python类

时间:2018-07-29 17:03:07      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:问题   app   darwin   方式   reload   test   模块   文件夹   解决   

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(‘\n‘)
 
# 根据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‘>
>>> 

python类

标签:问题   app   darwin   方式   reload   test   模块   文件夹   解决   

原文地址:https://www.cnblogs.com/monkey-moon/p/9385823.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!