zoukankan      html  css  js  c++  java
  • Python学习之面向对象(一)

    第六章 面向对象

    6.1 面向对象的初识

    6.1.1 什么是面向对象

    面向过程式编程:

    ​ 好处:出色的完成所有的需求

    ​ 坏处:凡是更改或者增加一条需求,可能整个项目都随之改变

    面向对象式编程:

    类:具有相似功能和特性的一类事物

    对象:类的具体体现

    类的优点:

    ​ 类是相似功能特征的集合,可以让代码更清晰,更合理化

    ​ 类是一个公共的模板,对象是从这个模板产出的实体

    6.1.2 类

    结构
    class 类名:  #类名要具有意义,一般使用驼峰体命名
        #类的描述
        类的变量
        类的函数
    

    其中:

    类的变量,公认叫做属性(静态属性,静态字段)

    类的方法,公认叫做方法(动态方法,动态属性)

    例子:

    class Student():
    	"""  构建学生类  """
        daily = '学习'
        role = '学习技能'
        def work(self):
            print('每天都要上课')
        def study(self):
            print('公共课和专业课')
    
    类的属性:

    1.查看类的所有内容,使用:类名.__dict__获取类的全部信息

    print(Student.__dict__)
    

    输出内容中类的内置属一些内置属性的含义

    • __dict__ 包含该类的命名空间的字典。
    • __doc__ 类的文档描述,可以不定义。
    • __name__ 类名,一般使用驼峰体进行命名
    • __module__ 定义类的模块名称,值是__main__

    2.使用 . 对静态的属性操作

    print(Student.daily)      #查   
    Student.daily = '写代码'   #改
    del Student.role          #删
    print(Student.__dict__)
    

    3.类名的角度调用类中的方法,一般类中的方法(除去类的方法,静态属性外)通过以下方式调用

    Student.work(2)  #对于动态的方法,采用这种方式调用
    Student.__dict__['work'](2) #一般不采用这种方法
    

    6.1.3 对象

    实例化过程:

    对象名 = 类名() 实例化一个对象

    class Student:
        '''定义学生类'''
        daily = '学习'
        role = '学习技能'
        def __init__(self):
            print(self)
            print('666')
        def work(self):
            print('每天都要上课')
        def study(self):
            print('公共课和专业课')
    
    st1 = Student()  #比较st1的地址与self的地址
    print(st1)
    st2 = Student()
    print(st2)
    

    实体化对象时发生的三件事:

    • 在内存中创建一个对象名命名的空间
    • 自动执行__init__方法,并且将对象空间传给self参数
    • 执行__init__方法里面的代码,给对象空间封装属性
    对象的属性

    通过 对象名.属性名 对__init__进行增删改查,就是对对象的属性进行操作

    class Student:
        '''定义学生类'''
        daily = '学习'
        mission = '学习技能'
        def __init__(self):
            self.name = '盖伦'
            self.team = '德玛西亚'
        def work(self):
            print('每天都要上课')
        def study(self):
            print('公共课和专业课')
    
    st = Student()
    print(st.name)
    st.role = '战士'
    print(st.__dict__)  #查看 st 的属性
    del st.role
    print(st.__dict__)
    
    对象查看类的属性

    ​ 对象只能查看类里的公共属性,无法更改类的属性,这里需要注意的是即使使用 对象名.类里的属性名 进行的操作只是在对象的空间__init__ 里添加了与类同名的属性,其实二者存在于不同的内存空间中。

    6.1.4 动态实体化对象

    可以在任何位置给对象封装属性,在对象实体化时给在类的相应位置设置实参即可,还可以在类的方法内也可对对象的属性进行操作。

    class Student:
        '''定义学生类'''
            
        daily = '学习'
        mission = '抵御外敌'
            
        def __init__(self,na,te):
            self.name = na
            self.team = te
        
        def work(self,eq):
            self.equip = eq   
            print(f"{self.name}需要装备{eq},为了{self.mission}")  #仔细研究这里属性的调用,非常有意思
            
        def study(self):
            print('公共课和专业课')
    
    st = Student('盖伦','召唤师峡谷')
    print(st.__dict__)
    st.work('日炎铠甲')
    print(st.__dict__)
    

    6.1.5 self

    ​ self就是类中的方法的第一个位置参数,如果通过对象执行类中的方法,解释器就自动的将此对象空间当做实参传给self,其实self最大的作用就是引用当前方法的调用者。

    ​ 浅显的理解就是,在对象内部进行的相互引用或是赋值等操作,就用self,也就是self作为自己的内部相互操作加个名字,不然怎么使用 . 呢。

    class Student:
        '''定义学生类'''
        daily = '学习'
        mission = '抵御外敌'
        def __init__(self):
            self.name = '盖伦'
    
        def work(self):  #定义一个work方法
            print('现在执行的是work方法')
    
        def study(self):  #定义一个study方法,需要借用work的方法
            self.work()   #使用self参数引用调用work()方法的对象
            print('现在运行的是study方法')
    
    s = Student()
    s.study()
    
    仅供参考,欢迎指正
  • 相关阅读:
    正向代理/反向代理理解、Nginx概述、安装及配置详解
    项目部署问题:xftp无法连接服务器、Nginx403 Forbidden解决、nginx反向代理解决前端跨域问题
    Vue上传文件:ElementUI中的upload实现
    理解Vue的计算属性
    今天在CSDN看懂这个帖子,也是我的困惑,记录一下(过了三十的码农,你选择的是哪个,说出你的想法)
    WCF IIS上部署服务
    [转]WCF RESTful service and WebGrid in ASP.NET MVC 5
    WCF 与其它技术的比较
    Visual Studio Debug和Release的区别及obj的作用
    C# Json格式字符串
  • 原文地址:https://www.cnblogs.com/jjzz1234/p/11138746.html
Copyright © 2011-2022 走看看