第十八天

今日内容

一、面向对象编程

1.1面向对象编程介绍

  '''
  面向对象编程
      核心是对象二字,对象就是一个用来盛放数据与功能的容器
      基于该思想编程思想写程序就是创造一个个的容器

      优点:扩展性强
      缺点:代码的复杂度提升

  '''
  
  #不完善的面向对象编程思想
  def message(msg):
      print("my name is %s age is %s gandel is %s" % (msg["name"],msg["age"],msg["gandel"]))

  msg1 = {    
      "name":"hyk",
      "age":18,
      "gandel":"male",
      "message":message
  }

  msg2 = {
      "name":"xxx",
      "age":19,
      "gandel":"male",
      "message":message
  }
  msg1["message"](msg1)

1.2类与对象

  # 定义类的过程
  # 1、立刻运行类体内代码
  # 2.将运行过程中产生的名字都丢到类的名称空间中
  class Student:      #类:对象之间的公共信息
      school = "上海校区"

      def __init__(self,x,y,z):
          self.name = x
          self.age = y
          self.gender = z

      def tell_info(self):
          print("my name is %s age is %s gandel is %s from is %s" % (self.name,self.age,self.gender,Student.school))

  #调用类的过程
  #1、先创造一个空对象
  #2、自动触发类内的__init__函数的运行,将空对象当做第一个参数传入
  #返回一个初始化好的对象给obj1
  obj1 = Student("xxx",18,"male")
  obj2 = Student("yyy",19,"femal")
  obj1.tell_info()
  # print(obj1.__dict__)
  # print(obj2.__dict__)
  # print(Student.__dict__)


  #属性查找
  print(obj1.name)

  #先从对象本身名称空间找,没有的话再从类的名称空间中找
  # obj1.school = "xxx"
  # print(obj1.school)

  #类.属性 :从自己的名称空间找
  print(Student.school)
  print(Student.__init__)


  #类中的数据属性是直接共享给所有对象用的
  print(Student.school)
  print(obj1.school)
  print(obj2.school)

  # 类内的数据改变会影响对象的调用,对象中的数据改变只会影响自己本身
  Student.school = "XXX"
  obj1.school = "yyy"
  print(Student.school,id(Student.school))
  print(obj1.school,id(obj1.school))
  print(obj2.school,id(obj2.school))

  #类中函数的调用
  Student.tell_info(obj1)
  obj1.tell_info()   #将调用者的参数传入类中函数

1.3面向对象编程之封装

  #为什么要隐藏数据:
  #1、隐藏数据是为了严格控制类外部访问者对属性的操作
  #2、隐藏函数属性是为了隔离复杂度,让用户只看到封装好的功能
  #隐藏类的属性
  #__开头的属性特点:
  #1、并没有真的藏起来,只是变形的
  #2、该变形只在定义阶段,扫面语法的时候执行,此后__开头的属性都不会变形
  #3、该隐藏对外不对内
  class People:
      __country = "China"  #相当于 _PeoPle__contry = ”"china"
  print(People._People__country)
原文地址:https://www.cnblogs.com/kk942260238/p/14263952.html