zoukankan      html  css  js  c++  java
  • 类与对象

    1.类与对象的概念

    1.1类

    类即类别、种类,是一种数据结构。如果把对象比作是特征与技能的结合体,那么类则是一系列对象相似的特征与技能的结合体。

    • 在现实世界中:一定先有对象,后有类
    • 在程序中:一定得先定义类,后调用类来产生对象
    #先定义类
    class LuffyStudent:
        school='luffycity'                                        #数据属性
    
        def learn(self):                                           #函数属性
            print('is learning')
    
        def eat(self):                                              #函数属性
            print('is sleeping')
    
    
    #后产生对象
    stu1=LuffyStudent()
    stu2=LuffyStudent()
    stu3=LuffyStudent()
    

    需要注意的是:

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

    1.2 类的使用

    1.2.1类的引用

    • 查看类的名称空间
    print(LuffyStudent.__dict__)
    print(LuffyStudent.__dict__['school'])
    print(LuffyStudent.__dict__['learn'])
    
    • 查看
    print(LuffyStudent.school) #LuffyStudent.__dict__['school']
    
    LuffyStudent.country = 'China' #LuffyStudent.['country'] = 'China'
    
     del LuffyStudent.country
    
    LuffyStudent.school = 'Luffycity'
    

    1.2.2 调用类,也成为实例化,得到程序中的对象

    s1=LuffyStudent()
    s2=LuffyStudent()
    s3=LuffyStudent()
    
    #如此,s1、s2、s3都一样了,而这三者除了相似的属性之外还各种不同的属性,这就用到了__init__
    

    1.2.3 __int__方法

    __init__方法用来为对象定制对象自己独有的特征

    #注意:该方法是在对象产生之后才会执行,只用来为对象进行初始化操作,可以有任意代码,但一定不能有返回值
    class LuffyStudent:
        ......
        def __init__(self,name,age,sex):
            self.name=name
            self.age=age
            self.sex=sex
        ......
    
    s1=LuffyStudent('Tom','male',18) #先调用类产生空对象s1,然后调用luffyStudent.__init__(s1,'Tom','male',18)
    s2=LuffyStudent('Rose','female',38)
    s3=LuffyStudent('Jack','male',78)
    

    1.2.4对象的操作

    • 生成对象
    stu1=LuffyStudent('王二丫','女',18) #LuffyStudent.__init__(stu1,'王二丫','女',18)
    
    • 加上init方法后,实例化的步骤

    ​ 1、先产生一个空对象stu1

    ​ 2、LuffyStudent.init(stu1,'王二丫','女',18)

    print(stu1.dict)
    
    stu1.Name='李二丫'
    print(stu1.dict)
    print(stu1.Name)
    
    • 删除
    del stu1.Name
    print(stu1.dict)
    
    stu1.class_name='python开发'
    print(stu1.dict)
    

    补充说明

    • 站的角度不同,定义出的类是截然不同的;
    • 现实中的类并不完全等于程序中的类,比如现实中的公司类,在程序中有时需要拆分成部门类,业务类等;
    • 有时为了编程需求,程序中也可能会定义现实中不存在的类,比如策略类,现实中并不存在,但是在程序中却是一个很常见的类。

  • 相关阅读:
    Tabular DataStream protocol 协议
    Redis 分片实现 Redis Shard [www]
    进程线程协程那些事儿
    Linux下用freetds执行SQL Server的sql语句和存储过程
    unixODBC
    在linux下有没有什么软件可以连接windows上的MSSQL SERVER
    Nginx使用ssl模块配置HTTPS支持
    谈一款MOBA类游戏《码神联盟》的服务端架构设计与实现
    core dump使用方法、设置、测试用例
    linux下生成core dump文件方法及设置
  • 原文地址:https://www.cnblogs.com/huang-yc/p/8983300.html
Copyright © 2011-2022 走看看