类和对象的概念

核能气质少年 提交于 2020-03-04 12:19:26

类和对象的基本概念

类:抽象名词,代表一个集合,共性的事物

对象:具象的事物,单个个体

  • 类和对象的关系
    • 对象:代表一类事物的某一个个体
    • 类:代表的是一大类事物

类中的内容,应该具有两个内容

  • 表明事物的特征,是静态属性(变量)
  • 表明事物功能或动作,是动态属性也称方法(函数)

定义类

  • 类中的静态变量和方法名在程序加载过程中就已经执行完了,不需要等待调用
  • 在整个类加载完之前,类名还不会出现在内存中
class Person:
    # 定义属性
    walk_way = '直立'
    
    # 定义方法
    # __init__方法是给对象封装属性
    def __init__(self,name,age):
        self.name = name
        self.age = age
        
    def eat(self):
        print('eat')
        
obj = Person('bob',20)  # 在内存实例化一个对象空间
print(obj.name)  # bob

实例化过程:

  1. 在内存开辟一个对象空间,含有类对象指针的对象空间,该指针指向类
  2. 自动执行类中的__init__方法,并将对象空间传给self参数,其他参数需要传入
  3. 执行__init__方法,给对象空间封装相应的属性

查看类或对象的内置属性

print(Person.__dict__)  # 查看类的内置属性
print(obj.__dict__)  # 查看对象的内置属性
  • 不可通过__dict__对类的内置属性进行增删改,但可以对对象的内置属性进行增删改

    obj.__dict__['eye'] = 'blue'  # 增加'eye'属性
    obj.__dict__['age'] = 18  # 修改age的值
    del obj.__dict__['name']  # 删除name属性

还可以使用点操作符访问对象成员(obj.成员名称),用法和上面类似,如果对象或类中没有改成员名称,则会为对象添加该属性。

类和对象的成员分析

  1. 类和对象都可以存储成员,成员可以归类所有,也可以归对象所有
  2. 创建对象的时候,类中的成员不会放入对象中
  3. 对象存储成员时存储在当前对象中
  4. 对象访问一个成员时,如果对象中没有该成员,会尝试访问类中的同名成员;如果对象中有此成员,一定使用对象中的成员
  5. 不能通过对象对类中成员进行修改,对象只能查看类中的成员

组合:给一个类的对象封装一个属性,这个属性是另一个类的对象

  • 作用:让类的对象与另一个类的对象产生关系,类与类之间产生关系

面向对象的三大特性

  1. 继承 详细参考此文章
  2. 多态
    • 什么是多态:一个类表现出多种状态
      • 通过继承实现
      • 在python中,函数的参数不需要指定数据类型,所以不需要同继承的形式来统一一组类的类型
      • 也就是说,所有对象都是object类型,处处都是多态
    • 鸭子类型:
      • 不是明确的通过继承实现的多态
      • 如len():str, list, tuple, dict, set, range(n)可以使用len求长度
      • print(): 对于print而言,所有对象都是鸭子类型
  3. 封装
    • 公开;
    • 受保护的:
      • 将对象成员进行一定级别的封装,然后在类或者子类中可以进行访问,在外部不行
      • 封装方法: 在成员名称前添加一个下划线
    • 私有的:
      • 私有成员是最高级别的封装,只能在当前类或对象中访问,不会被子类继承
      • 在成员前面添加两个下划线
      • python的私有不是真私有,是一种改名策略,变成了类名._类名__私有变量

类和对象的三种方法

  • 实例方法

    • 需要实例化对象才能使用的方法
  • 静态方法

    • 不需要实例化,通过类直接访问
    • 不使用类或对象的命名空间,其实就是一个函数
  • 类方法

    • 不需要实例化
    • 该方法涉及到操作静态属性(所有对象都拥有的属性)、类方法、静态方法
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!