Python 从第一天开始就是面向对象的语言。正因为如此,创建和使用类和对象是非常地容易。这篇文章主要介绍了 python 中面向对象的相关资料,属于 python 面向对象学习的初级篇,本章将帮助您在使用 Python 面向对象编程的技术方面所有提高,有需要的朋友可以参考借鉴。
Python 是一种面向对象、解释型计算机程序设计语言,由 Guido van Rossum 于 1989 年底发明,第一个公开发行版发行于 1991 年。Python 语法简洁而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够把用其他语言制作的各种模块(尤其是 C/C++)很轻松地联结在一起。
前言
最近在学习 Python 的面向对象编程,以前是没有接触过其它的面向对象编程的语言,因此学习这一部分是相当带劲的,这里也总结一下。
概述
OOP 思想
面向对象的三大特性:
一、封装
封装,对具体对象的一种抽象,即将某些部分隐藏起来,在程序外部看不到,即无法调用。
私有化:将类或函数中的某些属性限制在某个区域之内,外部无法调用。
Python 中私有化的方法也比较简单,就是在准备私有化的属性(包括方法、数据)名字前面加双下划线。
例如:
- class ProtectMe(object):
- def __init__(self):
- self.me = "qiwsir"
- self.__name = "kivi"
- def __python(self):
- print("I love Python.")
- def code(self):
- print9"Which language do you like?")
- self.__python()
- if __name__ == "__main__":
- p = ProtectMe()
- print(p.me)
- print(p.__name)
- #运行结果
- qiwsir
- Traceback (most recent call last):
- File "21102.py", line 21, in <module>
- print p.__name
- AttributeError: 'ProtectMe' object has no attribute '__name'
说明:__name 属性隐藏了,无法调用。
调用私有属性,可以使用 property 函数
- class ProtectMe(object):
- def __init__(self):
- self.me = "qiwsir"
- self.__name = "kivi"
- @property
- def name(self):
- return self.__name
- if __name__ == "__main__":
- p = ProtectMe()
- print(p.name)
- #运行结果
- kivi
所以,在使用面向对象的封装特性时,需要:
第一步:将内容封装到某处
self 是一个形式参数,当执行
时,self 等于 obj1
- obj1 = Foo('wupeiqi', 18 )
当执行
时,self 等于 obj2
- obj2 = Foo('alex', 78 )
所以,内容其实被封装到了对象 obj1 和 obj2 中,每个对象中都有 name 和 age 属性,在内存里类似于下图来保存。
第二步:从某处调用被封装的内容
调用被封装的内容时,有两种情况:
- class Role(object):
- ac = None #类变量
- def __init__(self,name,role,weapon,life_value):
- #初始化方法
- self.name = name #实例变量(成员变量)
- self.role = role
- self.weapon = weapon
- self.life_val = life_value
- def buy_weapon(self,weapon): #定义方法
- #self:表示实例本身
- self.weapon = weapon
- # print("%s is buying [%s]" %(self.name,weapon))
- #把一个抽象的类变成一个具体的对象的过程,叫实例化
- p1 = Role("sanjiang",'Police',"B10",90) #实例
- t1 = Role("Chunyun",'Terrorist',"B11",100)
二、继承
继承,面向对象中的继承和现实生活中的继承相同,即:子可以继承父的内容。
- class SchoolMember(object):
- # member_nums = 0
- def __init__(self,name,age,sex):
- self.name = name
- self.age = age
- self.sex = sex
- # self.enroll()
- def enroll(self):
- SchoolMember.member_nums += 1
- print("SchoolMember [%s] is enrolled!" %self.name)
- def tell(self):
- print("Hello my name is [%s]" %self.name)
- class Teacher(SchoolMember):
- def __init__(self,name,age,sex,course,salary): #重写父类的__init__方法
- super(Teacher,self).__init__(name,age,sex) #继承(新式类)
- # SchoolMember.__init__(self,name,age,sex) #继承(旧式类)
- self.course = course
- self.salary = salary
- def teaching(self):
- print("Teacher [%s] is teaching [%s]" %(self.name,self.course))
- class Student(SchoolMember):
- def __init__(self,name,age,sex,course,tuition):
- super(Student,self).__init__(name,age,sex)
- self.course = course
- self.tuition = tuition
- def pay_tuition(self):
- print("ca,student [%s] paying tuition [%s] again" %(self.name,self.tuition))
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
来源: http://www.phperz.com/article/17/0320/320836.html