您的位置:首页 > 编程语言 > Python开发

Python中的类,模块,函数

2017-11-30 10:05 169 查看
转载地址   https://www.cnblogs.com/Joans/archive/2012/11/06/2749993.html

一:函数

  如果你需要在程序中重用代码,---------定义函数。 def 函数名(参数)://todo

  如:

  输出:

   也可以将函数的参数定义为默认参数,注:默认参数一般放参数的最后,如:

  

输出:

二:类

类的定义应该是放在面向对象的标题里,但是我们一般函数定义在类里面,从这个范围来说,我在这记录了类。

类和对象是面向对象编程的两个主要方面。类:创建一个新类型,而对象是这个类的实例,类使用class关键字创建。类的域和方法被列在一个缩进块中。

注意:在python语言中,不管什么类型的实例都被看做对象,如整数也被作为对象看待,它属于int类,这和其他语言c++,java把整数纯粹作为类型是不同的。

”域“的概念:


属于一个对象或类的变量被称为域,其实就是类里面定义的变量

[b]域——类的变量和对象的变量[/b]

1:类的变量:由一个类的所有对象(实例)共享使用,只有一个类变量的拷贝,所以当某个对象对类的变量做了改动的时候,这个改动会反映到所有其他的实例上。我理解为:其实它就是一个类的全局变量,类实例化后的对象都可以调用该变量。

[b]2:对象的变量: 由类的每个对象/实例拥有。因此每个对象有自己对这个域的一份拷贝,即它们不是共享的,在同一个类的不同实例中,虽然对象的变量有相同的名称,但是是互不相关的。我理解的是:不同的对象调用该变量,其值改变后互不影响,跟C#的语法一样,我还因为不理解第一点纠结了半天 !
[/b]

属于类级别的变量,在使用它的时候一定要带上类型名字 比如 MyClass.count

属于每个对象级别的变量,在调用的时候一定要带上self表明属于当前对象。self.name

如:




输出:


 

域(变量)和方法(函数)可以合称为类的属性

类的方法

类的方法普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,但是在调用这个方法的时候你为这个参数赋值,Python会提供这个值。这个特别的变量指对象本身,按照惯例它的名称是
self
。(类似于c#的this指针)


如:




__init__方法:属于python语言的构造函数,一个类只能有一个__init__方法

__del__方法
属于python语言的析构函数,
它在对象消逝的时候被调用。

当对象不再被使用时,
__del__
方法运行,但是很难保证这个方法究竟在 什么时候 运行。如果你想要指明它的运行,你就得使用
del
语句

三:模块

模块:如果你想要在其他程序中重用很多函数--------定义模块。其实就是很多的类型,很多的方法集合在一个或多个文件中,通过import ** 载入,类似于c#中的dll

模块基本上就是一个包含了所有你定义的函数和变量的文件。为了在其他程序中重用模块,模块的文件名必须
.py
为扩展名。

注意:每个模块都有自己的名称__name__,__name__作为模块的内置属性,它的作用就是检测.py文件的调用方式,然后根据__name__做出相应的处理。

模块有两种调用方式:1:被import载入调用  2:直接使用

如果模块直接执行,__name__="__main__";  通常,此语句用于模块测试中使用。

例如:定义一模块名字为MyModule.py



直接运行输出:

通过其他模块调用:

调用模块代码:

间接调用运行输出:

 

导入部分类,函数及变量,可以使用from...import...   例如 from MyModule import ModuleClass

# coding =utf-8

## 类的定义
##--------------------------------------------------
class Employee:
empCount = 0
## 构造函数,函数名必须用: __init__
def __init__(self, name, salary):
self.name = name
self.salary = salary
Employee.empCount += 1
## 以下是类的普通成员函数
def displayCount(self):
print "Total Employee %d" % Employee.empCount

def displayEmployee(self):
self.displayCount()
print "Name : ", self.name,  ", Salary: ", self.salary

## 注:直接定义在类体内的数据成员是类的静态数据成员,为所有对象共有
##    定义在成员函数内的数据成员是各个对象独有的数据成员
##    每个成员函数都必须带self参数,函数被调用时不需要给这个参数赋值
##    成员函数之间调用时需要带 self前缀,如 line 17
##-------------------定义结束-------------------------------

"创建 Employee 类的第一个对象"
emp1 = Employee("Zara", 2000)
"创建 Employee 类的第二个对象"
emp2 = Employee("Manni", 5000)
emp1.displayEmployee()
emp2.displayEmployee()
emp1.age = 7 # 添加一个 'age' 属性
emp1.age = 8 # 修改 'age' 属性del emp1.age # 删除 'age' 属性
print getattr(emp1, 'age') # 返回 'age' 属性的值
delattr(emp1, 'age') # 删除属性 'age'
print hasattr(emp1, 'age') # 如果存在 'age' 属性返回 True。
setattr(emp1, 'age', 8) # 添加属性 'age' 值为 8
print hasattr(emp1, 'age')
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: