博客园

1、面向对象编程及语法

1、面向对象

2、专门语法

  #类
  #对象
  #属性

💣💣💣💣💣面向对象编程💣💣💣💣💣

面向对象编程

  核心:对象二字,对象就是一个用来盛放数据与功能的容器
  基于该思想编写程序就创造一个个的容器
  
  优点:扩展性强
  缺点:编程复杂度提升
  ps:和面向过程刚好相反

面向对象实例:

  class Student:
        school = '清华大学'
        def__init__(self,x,y,z):
              self.name = x
              self.age = y
              self.gender = z
        def tell_info(student)
              print('my name is %s age is %s genser is %s' %(studen['name'],student['age'],student['gender'])
  调用类的过程
        1、先创造一个空对象
        2、自动触发类内的__init__函数运行,将空对象当作第一个参数自动传入
        3、返回一个初始化好的对象给obj1
        obj1 = Student('egon',18,'male')
        obj2 = Student('tom',19,'female')
        print(obj1.__dict__)
        print(obj2.__dict__)
        print(Student.__dict__)

属性查找

  class Student:
        school = '北京大学'
        def__init__(self,x,y,z):
              self.name = x
              self.age = y
              self.genser = z
        def tell_info(self):
              print('my name is %s age is %s gender is %s' %(self.name,self.age,self.gender)
 obj1 = Student('egon',18,'male')
 obj2 = Student('lxx',13,'male')

对象,属性的查找顺序:先从对象的字典里找,再从类的字典里找

  print(obj1.name)
  print(obj.school)
  print(obj1.tell_info)
  
  obj1.school = 'xxxx'
  print(obj1.school)>>>>>xxxx 

类:属性:从类自己的字典里找 不过一般类是为了给对象用的

  print(Student.school)
  print(Student.__info__)
  print(Student.tell_info)

类中的数据属性是共享给所有对象的,所以更改类的数据内容,所有对象调用的都会改变,但是只改变单独对象的数据,不会影响到类和其他的对象数据

类中的函数是给对象用的,对象调用就是绑定方法,绑定的方法特点就是会将调用当作第一个参数自动传入

  # obj2.tell_info() 就是传入了obj2自己 tell_info(obj2)

隐藏属性

  class People:
        _country = 'China' 其实已经变成了 _People__country = 'China'
        def __init__(self,name,age):
              self.__name = name
              self.__age = age
        def_func(self):
              print('xxx')
  print(People._People__country)
  print(People._People__func)
  print(People.__dict__)
  obj1 = People('egon',18)
  print(obj1.__dict__)

__开头的属性的特点:

  1、并没有真的藏起来,只是变形的
  2、该变形只在定义类阶段,扫描语法 时候执行,此后__开头的属性都不会变形
  obj1.__gender = 'male'
  print(obj1.__dict__)
  print(obj1.gender)
  3、该隐藏对外不对内
  obj1.tell_name()
  
  为何要隐藏属性
        1、隐藏数据属性为了严格控制类外部访问者对属性的操作
  class People:
  
        def__init__(self,name,age):
              self.__name = name
              self.__age = age
        def tell_info(self)
              print('<%s:%s>' %(self.__name,self.__age))
        def set_info(self,name,age):
              if type(name)is not str:
                    print('名字必须是字符串')
                    return
              if type(age)is not int:
                    print('年龄必须是数字')
                    return
              self.__name = name
              self.__age = age
        obj = People('egon',18)
        
        obj1.tell_info()
        obj1.set_info('tom',28)
        obj1.tell_info()
      
        2、隐藏函数属性为了隔离复杂度
posted @ 2021-01-08 17:13  小刘学python  阅读(92)  评论(0编辑  收藏  举报