Python3面向对象

面向对象:Object-Oriented Programming
面向对象特点:

Encapsulation 封装
Inheritance 继承

Polymorphism 多态

面向对象编程:和面向过程一样,是一种编程思想
类是具有相同属性和行为方法的事物的抽象的集合
对象就是类具体的实例化

类的作用: 创建对象,一般会在类中定义一些属性和函数,当使用类创建对象的时候,该对象就会拥有类中定义的这些属性和函数
类中一些属性和函数,是由所有的对象身上共同的属性和行为抽离出来的

对象的作用:实现函数和属性的调用执行的

  1  -*- coding:utf-8 -*-
  2 # 在python中如何声明一个类:
  3 # class 班级群体
  4 # object 继承的父类  object基类、顶级父类
  5 class People(object):
  6     n=123  #类变量
#类变量的用途是大家共用的属性,节省开销
7 name='我是类变量' 8 n_list=[] 9 # 初始化函数,也叫构造函数,在创建对象的时候自动调用 10 # __init__ 内置函数 11 def __init__(self,name,age,phone): 12 # 在这个函数中需要将创建对象时就应该拥有的一些属性赋值 13 # 对象.属性名 = 属性值 14 # 这里的self相当于对象名 如:p1 = People('张三',22,110) 这里的self就是p1 15 self.name = name #实例变量(静态属性) 作用域就是实例的本身 16 self.age = age #相当于p1.age=age 17 self.phone = phone 18 19 def show(self):#类的方法,也叫类的功能 (动态属性) 20 # 这里的self相当于对象名 如:p1.show()这里的self就是p1,相当于People.show(p1),谁调用这个类里方法就是谁。 21 22 print(self.name) 23 24 print(People.n) #没有实例化之前可以使用类变量 25 # 使用People类创建一个对象 26 # 创建对象的基本格式:对象名 = 类名() 27 # 当创建一个对象时,会在内存中开辟一块空间,来存放这个对象,这个对象是有一个地址的 28 # 每次创建的对象都是一个单独个体,他们的内存地址都不一样 29 p1 = People('张三',22,110) #p1也叫做People的实例 也称对象 30 p2 = People('李四',26,120) 31 # 内存:程序运行时,在计算机中占用的空间 32 # python中自动管理内存的 33 print (p1) #<__main__.People object at 0x0000000002217E80> 34 # 获取对象的属性值 35 # 格式 :对象.属性名 36 name = p1.name 37 print(name) 38 age = p1.age 39 print(age) 40 phone = p1.phone 41 print(phone) 42 43 print('---------------',p1.n,p1.name) #可以直接使用类变量和实例变量>>--------------- 123 张三 44 #如果有个类变量是name,那么也打印相同变量名实例变量,没有再找类变量 45 46 # 修改对象的属性值 47 # 格式:对象.属性名 = 属性值 48 p1.name= '李四' 49 print (p1.name) 50 51 # python中用来属性值得函数 52 # 1.要设置属性值的对象 2.要设置的属性名 3.要设置的属性值 53 setattr(p1,'age',21) 54 55 # 可以给对象添加新属性 56 # 对象.属性名 = 属性值 如果这个属性不存在,那就是添加属性 57 p1.sex = '' #相当于在构造函数中 self.sex=sex 效果一样,只不过只是p1专用,其它对象没有这个属性 58 print (p1.sex) 59 60 # 删除对象的属性 61 # 对象的属性被删除之后,就不能再使用了 62 # AttributeError: sss 要删除的sss属性不存在 63 del p1.sex 64 # 删除对象属性的函数 65 # 1.要删除的对象 2.要删除的属性名 66 delattr(p1,'phone')#或del p1.phone 67 # 删除之后,p1就不能使用这个属性了 68 # print (p1.phone) 69 70 #用实例改变类变量 71 p1.n='改变类变量' 72 #用p1打印 73 print('---------p1-----------',p1.n) #>>---------p1----------- 改变类变量(相当于在p1内存中增加了:p1.n='改变类变量') 74 #用p2打印 75 print('---------p2-----------',p2.n) #>>---------p2----------- 123 76 77 People.n='ABCD' 78 print('p1:',p1.n,'p2:',p2.n) #>>p1: 改变类变量 p2: ABCD 79 80 p1.n_list='from p1' 81 p2.n_list='from p2' 82 print('p1:',p1.n_list,'p2:',p2.n_list,'People:',People.n_list) #>>p1: from p1 p2: from p2 People: [] 83 84 # setattr动态添加属性 85 attr_dict = {'iq':'150','eq':'150','color':'yellow'} 86 # for遍历 87 for key,value in attr_dict.items(): 88 # key是属性名,value是属性值 89 # setattr,可以将一个字符串的属性名 添加到对象的属性中 90 # p1.key = value 这种方式无法添加相当于写了p1.'iq'= '150' 91 setattr(p1,key,value) 92 93 print (p1.iq) 94 95 96 # delattr动态删除属性 97 # 删除对象p1中的属性 98 attr_dict = ['iq','eq','color'] 99 100 for attr in attr_dict: 101 # 可以使用delattr函数删除 102 delattr(p1,attr) 103 104 # 属性删除之后,就不能再使用了 105 # print (p1.iq)
106
107 #析构函数:在实例释放、销毁的时候执行,做收尾工作
108 #如:关闭一些数据库连接、关闭打开的文件等
109 创建析构函数
110 def __def__(self): #在类实例释放时自动执行的,可以不用传参数
111  print('%s 彻底释放了' %self.name) #使用del p1时也会执行析构函数
112
113
114 私有方法 私有属性 在类里面可以改私有属性
115 def __init__(self,name,age,phone)
116   self.name=name
117   self.age=age
117   self.__phone=phone #私有属性
118
119print(p1.phone) 不能访问
120
121 def show_status(self): #在类里面定义一个访问的方法
122   print('%s' %self.phone)
123print(p1.show.status()) 这样访问
124
125私有方法就在方法名前加两个"__"
126 在外面就不能访问
127 p1.__show() #不能访问



 


 

 


posted @ 2018-05-04 23:12  路飞2018  阅读(245)  评论(0编辑  收藏  举报