第六章 面向对象

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()

Python学习之面向对象(一)的更多相关文章

  1. Python学习之==>面向对象编程(二)

    一.类的特殊成员 我们在Python学习之==>面向对象编程(一)中已经介绍过了构造方法和析构方法,构造方法是在实例化时自动执行的方法,而析构方法是在实例被销毁的时候被执行,Python类成员中 ...

  2. Python学习一(面向对象和函数式编程)

    学习了一周的Python,虽然一本书还没看完但是也收获颇多,作为一个老码农竟然想起了曾经荒废好久的园子,写点东西当做是学习笔记吧 对Python的语法看的七七八八了,比较让我关注的还是他编程的思想,那 ...

  3. 从0开始的Python学习014面向对象编程

     简介 到目前为止,我们的编程都是根据数据的函数和语句块来设计的,面向过程的编程.还有一种我们将数据和功能结合起来使用对象的形式,使用它里面的数据和方法这种方法叫做面向对象的编程. 类和对象是面向对象 ...

  4. python学习 day23 面向对象三大特性之继承

    ### 面向对象三大特性值继承#### 1.什么是继承 继承是一种关系,必须存在两个对象才可能产生这种关系,在现实生活中的继承,王思聪可以继承王健林的财产 被继承的成为父,继承的一方成为子 在程序中, ...

  5. Python学习-day6 面向对象概念

    开始学习面向对象,可以说之前的学习和编程思路都是面向过程的,从上到下,一步一步走完. 如果说一个简单的需求,用面向过程实现起来相对容易,但是如果在日常生产,面向对象就可以发挥出他的优势了. 程序的可扩 ...

  6. Python学习之面向对象基础

    python的面向对象和以前学的c++,Java都是一般,大同小异,面向对象基础先谈谈类的构造,编写,属性和方法的可见性等等 1.定义类,创建和使用对象 #定义类 class Student(obje ...

  7. Python学习--10 面向对象编程

    面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 本节对于面向对象的概念不做 ...

  8. python学习总结(面向对象进阶)

    -------------------类属性和实例属性关系------------------- 1.类属性和实例属性关系     1.实例属性         实例对象独有的属性     2.类属性 ...

  9. python学习day19 面向对象(一)封装/多态/继承

    面向对象 封装思想:将同一类的函数函数封装到同一个py文件中,方便调用 面向对象也有封装的作用,将同一类的函数封装到一个类中 多态(鸭子模型):多种类型/多种形态 #,什么事鸭子模型 对于一个函数,p ...

  10. python学习笔记----面向对象

    面向对象 类:成员变量(属性) 方法(操作成员变量) 出一个场景:玩过游戏.主人公,进入了一个场景,有10个小怪物是一样的.有攻击力,血(100格).如果小怪物有多个数值需要管理,小怪物的血量.小怪物 ...

随机推荐

  1. hiho #1308 : 搜索二·骑士问题

    #1308 : 搜索二·骑士问题 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi:小Ho你会下国际象棋么? 小Ho:应该算会吧,我知道每个棋子的移动方式,马走日象 ...

  2. mybatis 中 if-test 判断大坑

    [<if test="takeWay == '0'">]mybatis的if判断 单个的字符要写到双引号里面才行,改为<if test='takeWay == & ...

  3. 16.html转pdf的一个小示例

    def get_html(request): data = {"name": "alex", "age": 12, "sex&qu ...

  4. 计算机网络(三),TCP报文段详解

    目录 1.TCP(Transmission Control Protocol传输控制协议)作用 2.TCP报文段详解 三.TCP报文段详解 1.TCP(Transmission Control Pro ...

  5. javascript中继承方式及优缺点(三)

    文以<JavaScript高级程序设计>上的内容为骨架,补充了ES6 Class的相关内容,从我认为更容易理解的角度将继承这件事叙述出来,希望大家能有所收获. 1. 继承分类 先来个整体印 ...

  6. 【封装工程】OI/ACM常用封装

    前言 笔者有的时候无聊,就将一些奇怪的东西封装起来. 范围主要是在\(OI\)或者\(ACM\)中的常见数据结构等. 随着笔者的能力的提升,可能会对原来的封装程序进行修改,并且保留原来的版本. [ST ...

  7. unittest详解(七) 自动生成测试报告

    用例执行完成后,执行结果默认是输出在屏幕上,其实我们可以把结果输出到一个文件中,形成测试报告. unittest自带的测试报告是文本形式的,如下代码: import unittest if __nam ...

  8. Misplaced alignment tab character &

    范例: 期望的标题效果:Literature review & Research set-up 在Latex里写的标题:\section{Literature Review & Res ...

  9. 完美解决前端跨域之 easyXDM 的使用和解析

    前端跨域问题在大型网站中是比较常见的问题.本文详细介绍了利用 easyXDM 解决前端跨域的原理细节和使用细节,具体使用时可以在文中代码实例的基础上扩展完成. 0.背景 因个别网络运营商存在 HTTP ...

  10. CSS Selectors

    CSS selectors are used to "find" (or select) HTML elements based on their element name, id ...