2.7 面向对象介绍
面向过程和面向对象面向过程和面向对象编程- 面向过程编程:函数式编程,C程序等
- 面向对象编程:C++,Java,Python等
类和对象
类和对象:是面向对象中的两个重要概念- 类:是对事物的抽象,比如:人类、球类
- 对象:是类的一个实例,比如:足球、篮球实例说明:
- 球类可以对球的特征和行为进行抽象,然后可以实例化一个真实的球实体出来。
为什么面向对象
面向对象的主要思想是:- 封装
- 继承
- 多态这种思想方便解决较为复杂的项目,且维护起来较为容易。
Python类定义
类定义:类把需要的变量和函数组合成一起,这种包含称为“封装”class A(object):类的结构:class 类名: 类名每个单词的首字母大写成员变量 – 属性成员函数 – 方法类的创建
class MyClass(object):def fun(self):print “I am function”类的方法中至少有一个参数self例子#!/usr/bin/pythonclass People(object): 创建一个类
color = 'Yellow' 定义类的属性def think(self): 定义一个类的方法,self必须要加,说明这是一个类自己的方法self.color = 'black' 可以给类的属性重新赋值print "I am thinking"print "i am %s man" % self.color 重新调用变量ren = People() 将类实例化然后赋值给renprint ren.color 实例化后的对象调用类的属性colorren.think() 实例化后的对象调用类的方法[root@salt-master ~]# python 3.py
YellowI am a thinkerI am black man类由属性和方法组成,类的属性是对数据的封装,类的方法是对类的行为的封装。
- 成员变量 -- 静态属性
- 成员函数 -- 动态方法创建对象的过程称之为实例化;当一个对象被创建后,包含三个方面的特性:对象句柄、属性和方法。句柄用于区分不同的对象对象的属性和方法与类中的成员变量和成员函数对应obj = MyClass() //创建类的一个实例(对象)通过对象来调用方法和属性
2.8 类的属性
类的属性按使用范围分为公有属性和私有属性,类的属性范围取决于属性的名称。- 公有属性:在类中和类外都能调用的属性。
- 私有属性:不能在类外及被类以外的函数调用。定义方式:以”__”双下划线开始的成员变量就是私有属性可以通过instance._classname__attribute方式访问。
- 内置属性:由系统在定义类的时候默认添加的,由前后双下划线构成,dict, module。#!/usr/bin/python
class People(object):
color = 'Yellow'age = 30 这里定义私有属性 双下划线注意,这个属性只能在类的内部使用def think(self):print "I am a thinker"self.color='black'print "I am %s man" % self.colorprint self.age 访问私有属性ren = People()print ren.colorren.think()#print ren.age 报错,在外部不能调用类的私有属性如果要访问类的私有属性,可以把私有属性放在类的方法中,然后调用类的方法第二种访问类的私有属性的方法 实例._类名__属性名 print ren._Peopleage 这种方法只建议在测试的时候使用,不建议在程序中使用print ren.dict 直接访问类的内置属性 返回的将是 {'color': 'black'} 这个字典
也可以通过People.color 直接访问类的属性 print People.color对象可以去修改类的属性 ren.color='white' 修改的是对象的属性,不会修改类原来的属性
类调用内置属性 People.dict2.9 类的方法
方法的定义和函数一样,但是需要self作为第一个参数。类方法为:- 公有方法
- 私有方法
- 类方法
- 静态方法
公有方法:在类中和类外都能调用的方法。
def think(self):print "I am a thinker"self.color='black'print "I am %s man" % self.colorprint self.__age上面就是一个公有方法私有方法:不能被类的外部调用,在方法前面加上”__”双下划线就是私有方法。
#!/usr/bin/pythonclass People(object):
color = 'Yellow'age = 30def think(self):print "I am a thinker"self.color='black'print "I am %s man" % self.colorprint self.agedef test(self):self.talk() 在内部来调用talk()方法def __talk(self): 定义私有方法
print "I am talking with Tom"
jack = People()
jack.test() jack.__talk() 报错 不能通过对象直接访问类的私有方法self参数
用于区分函数和类的方法(必须有一个self),self参数表示执行对象本身。类的方法
类方法:被classmethod()函数处理过的函数,能被类所调用,也能被对象所调用(是继承的关系)def test(self):print 'Testing....'cm = classmethod(test) test方法被classmethod处理 然后赋给cm变量People.cm() 类调用cm函数 就是调用了test方法 这种调用就是动态的 因为加载到内存里的是某个方法,通过类来调用方法是非常节省内存的静态方法:相当于”全局函数”,可以被类直接调用,可以被所有实例化对象共享,通过staticmethod()定义,静态方法没有”self”参数。
def test(): 静态方法没有self参数print 'this is func' sm = staticmethod(test) 使用staticmethod函数处理一下People.sm() 类调用静态方法静态方法调用的时候会把类中的所有方法都加载到内存中 静态比动态的速度要快一点静态方法中使用 People.color来直接访问类的属性装饰器: 可以使用装饰器来代替 classmethod() 和 staticmethod()函数
- @classmethod
- @staticmethod@classmethod 加载装饰器,它只对它下一行的函数生效,说明他是一个类方法def test(self):print 'this is func'
精彩评论