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)
 


猜你喜欢

转载自www.cnblogs.com/zhong2018/p/8993046.html