OOP(面向对象编程)的思想在不少语言中都已经很成熟了, 在Python里, 也支持这种编程方式
面向编程里面的几个概念: 类, 对象, 属性, 方法,下面就用例子看一下如何实现python
class Classname(object):
关键字class
, 括号中的object表是Classname类继承的类, 默认都至少要继承一个叫object
的类编程
好比要定义一个学生类:函数
class Student(): pass
这里咱们仅仅是定义了一个类, 并未作任何实际的工做code
那如何使用一个类呢, 固然要实例化这个类了对象
s = Sutdent() print s #<__main__.Student object at 0x7fb60ad6c450>
那这个s 其实就是这个类的一个对象
(实例),继承
这个其实就是类中的一些变量, 能够外部赋值, 也可内部定义, 假设咱们外部定义某个Student实例的名字get
s.name = "Yi_Zhi_Yu" print s.name #Yi_Zhi_Yu
在类内部定义it
class Student(): name = "Yi_Zhi_Yu" s = Sutdent() print s.name #Yi_Zhi_Yu
类的方法, 表示类的对象能够进行的操做面向对象编程
class Student(): name = "Yi_Zhi_Yu" def set_name(self, name): self.name = name def get_name(self) return self.name #实例化 s = Sutdent() s.set_name("Tony") print s.get_name() #Tony
注意, 类中的每一个方法定义的时候都至少要带一个参数 self
, 他表明的是绑定的实例, 即方法中要操做的对象, 这个和PHP很不同, 假如不带这个self 参数class
def get_name() return "Tony" print s.get_name() #TypeError: get_name() takes no arguments (1 given)
会报错, 还说已经传递了一个给get_name, 实际上这个1 given
就是对象, get_name中须要有个参数接收, 就是self
, 因此实际上这个self
也能够用其余名称代替, 由于他仅仅是个参数名
def get_name(m): return m.name print s.get_name() # Tony
这个self也仅仅是在定义方法时带, 实际调用的时候要省略, 为何的缘由就是上面说的, 会自动传递进去
另外在说一个特殊的方法, 在实例化类的时候, 每每须要在实例的时候就执行某些操做, 在PHP中叫构造函数, 那python中呢: __init__
这里顺便把完成的类代码写下来
class Student(): name = "" def __init__(self, name): #天然要带self self.name = name def set_name(self, name): self.name = name def get_name(m): return m.name s = Student("Yi_Zhi_Yu") print s.get_name() #Yi_Zhi_Yu
咱们写好了上面的类, 文件名称叫student.py, 如何被其余模块引入呢
第一种方式
import student s = student.Student("Yi_Zhi_Yu") print s.get_name() #Yi_Zhi_Yu
另外一种方式
from student import Student s = Student("Yi_Zhi_yu") print s.get_name()
其实, 第二种方式是用于引入某个模块的某些函数或类或变量, 而不是彻底引入,好比, 咱们在上面的student模块文件的Student类外层添加一个函数
def f_i_test(): print "Hello World"
当咱们须要这个模块中的这个函数,而不须要Student类的时候, 就可使用
from student import f_i_test f_i_test() #Hello World