zoukankan      html  css  js  c++  java
  • python面向对象:类与对象

    类与对象的概念

    类即类别、种类,是面向对象设计的最重要的概念

    种类:是特征与技能的结合体

    类:是一系列对象相似的特征与技能的结合体

    • 在现实世界中:是先有对象,再有类
    世界上肯定是先出现各种各样的实际存在的物体,然后随着人类文明的发展,人类站在不同的角度总结出了不同的种类,比如
    人类、动物类、植物类等概念。也就说,对象是具体的存在,而类仅仅只是一个概念,并不真实存在,比如你无法告诉我人类
    具体指的是哪一个人。

    • 在程序中:先定义类,后产生对象

    这与汗水的使用时类似的:先定义函数,后调用函数,类也是一样的:在程序中需要先定义类,后调用类。

    不一样的是:调用函数会执行函数体代码返回的函数执行的结果,而调用类会产生对象,返回的是对象

    定义类

    按照上述步骤,我来定义一个类

    • 在现实世界中,先有对象,再有类
    对象1:李坦克
        特征:
            学校=oldboy
            姓名=李坦克
            性别=男
            年龄=18
        技能:
            学习
            吃饭
            睡觉
    
    对象2:王大炮
        特征:
            学校=oldboy
            姓名=王大炮
            性别=女
            年龄=38
        技能:
            学习
            吃饭
            睡觉
    
    对象3:牛弹琴
        特征:
            学校=oldboy
            姓名=牛弹琴
            性别=男
            年龄=78
        技能:
            学习
            吃饭
            睡觉
    
    
    现实中的学生类
        相似的特征:
            学校=oldboy
        相似的技能:
            学习
            吃饭
            睡觉
    
    •   在程序中,务必保证:先定义(类),后使用类(用来产生对象)
    class OldboyStudent:
        school = 'oldboy'
        def learn(self):
            print('is learning')
        
        def eat(self):
            print('is eating')
            
        def sleep(self):
            print('is sleeping')
    

      注意:

    •     类中可以有任意python代码,这些代码在类定义阶段便会执行,因而会产生新的名称空间,用来存放类的变量名与函数名,可以通过oldboystudent__dict__查看
    • 类中定义的名字,都是类的属性,点事访问属性的语法
    • 对于经典类来说我们可以通过该字典操作类名称空间的名字,但新式类有限制

    类的使用

    • 引用类的属性
    # 查
    s1 = OldboyStudent.school
    print(s1)
    # 修改
    s2 = OldboyStudent.school = '北京大学'
    print(s2)
    
    # 增加
    s3 = OldboyStudent.x = 223
    print(s3)
    
    # 删除
    del OldboyStudent.x
    
    •   调用类,或称为实例化,得到程序中的对象
    s1=OldboyStudent()
    s2=OldboyStudent()
    s3=OldboyStudent()
    

      

    #如此,s1、s2、s3都一样了,而这三者除了相似的属性之外还各种不同的属性,这就用到了__init__
    • __init__ 方法
    class OldboyStudent:
        school = 'oldboy'
        def learn(self):
            print('is learning')
    
        def eat(self):
            print('is eating')
    
        def sleep(self):
            print('is sleeping')
    
        def __init__(self, name, age, sex):
            self.name = name
            self.age = age
            self.sex = sex
    
     # 加上__init__方法后,实例化的步骤
     # 1、先调用类产生空对象s1,
     # 2、再调用OldboyStudent.__init__('李坦克', '男', 18)
    
    
    s1 = OldboyStudent('李坦克', '男', 18) 
    s2 = OldboyStudent('王大炮', '男', 38) 
    s3 = OldboyStudent('牛弹琴', '女', 22)
    

      

      

      对象使用

    # 执行__init__,s1.name = '李坦克',很明显也会产生对象的名称空间可以用s1.__dict__查看,查看结果为:

    {'name': '李坦克', 'age': '男', 'sex': 18}
    
    s1.name  # 查,等同于s1.__dict__['name']= '李坦克'
    s1.name = '李坦克'  # 改,等同于s1.__dict__['name']='李坦克'
    s1.course = 'python'  # 增,等同于s2.__dict__['course']='python'
    del s1.course # 删除,等同于s1.__dict__.pop('course)
    

      补充说明

    • 站的角度不同,定义出的类是截然不同的;
    • 现实中的类并不完全等于程序中的类,比如现实中的公司类,在程序中有时需要拆分成部门类,业务类等
    • 有时为了编程需求, 程序中也可能会定义现实中不存在的类,比如策略类,现实中并不存在,但是在程序中却是一个很常见的类
    #加上__init__方法后,实例化的步骤
    # 1、先产生一个空对象stu1
    # 2、LuffyStudent.__init__(stu1,'王二丫','女',18)
  • 相关阅读:
    .NET Core 调用百度 PaddleOCR 识别图文
    ASP.NET Core 查看应用状态和统计
    锐浪报表 winform程序 数据源设置为excel时提示用户名密码隐藏
    单例
    WPF 设计器一直加载一分钟才显示
    .net 5 SignalR WPF 服务端+客户端
    WPF 使用Image 捕获摄像头数据,并将image改为圆形
    Vue Element-ui Table实现动态新增和删除
    Element-UI 中使用rules验证
    @Value读取不到配置文件的值
  • 原文地址:https://www.cnblogs.com/mike-liu/p/9127533.html
Copyright © 2011-2022 走看看