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()
Python学习之面向对象(一)的更多相关文章
- Python学习之==>面向对象编程(二)
一.类的特殊成员 我们在Python学习之==>面向对象编程(一)中已经介绍过了构造方法和析构方法,构造方法是在实例化时自动执行的方法,而析构方法是在实例被销毁的时候被执行,Python类成员中 ...
- Python学习一(面向对象和函数式编程)
学习了一周的Python,虽然一本书还没看完但是也收获颇多,作为一个老码农竟然想起了曾经荒废好久的园子,写点东西当做是学习笔记吧 对Python的语法看的七七八八了,比较让我关注的还是他编程的思想,那 ...
- 从0开始的Python学习014面向对象编程
简介 到目前为止,我们的编程都是根据数据的函数和语句块来设计的,面向过程的编程.还有一种我们将数据和功能结合起来使用对象的形式,使用它里面的数据和方法这种方法叫做面向对象的编程. 类和对象是面向对象 ...
- python学习 day23 面向对象三大特性之继承
### 面向对象三大特性值继承#### 1.什么是继承 继承是一种关系,必须存在两个对象才可能产生这种关系,在现实生活中的继承,王思聪可以继承王健林的财产 被继承的成为父,继承的一方成为子 在程序中, ...
- Python学习-day6 面向对象概念
开始学习面向对象,可以说之前的学习和编程思路都是面向过程的,从上到下,一步一步走完. 如果说一个简单的需求,用面向过程实现起来相对容易,但是如果在日常生产,面向对象就可以发挥出他的优势了. 程序的可扩 ...
- Python学习之面向对象基础
python的面向对象和以前学的c++,Java都是一般,大同小异,面向对象基础先谈谈类的构造,编写,属性和方法的可见性等等 1.定义类,创建和使用对象 #定义类 class Student(obje ...
- Python学习--10 面向对象编程
面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 本节对于面向对象的概念不做 ...
- python学习总结(面向对象进阶)
-------------------类属性和实例属性关系------------------- 1.类属性和实例属性关系 1.实例属性 实例对象独有的属性 2.类属性 ...
- python学习day19 面向对象(一)封装/多态/继承
面向对象 封装思想:将同一类的函数函数封装到同一个py文件中,方便调用 面向对象也有封装的作用,将同一类的函数封装到一个类中 多态(鸭子模型):多种类型/多种形态 #,什么事鸭子模型 对于一个函数,p ...
- python学习笔记----面向对象
面向对象 类:成员变量(属性) 方法(操作成员变量) 出一个场景:玩过游戏.主人公,进入了一个场景,有10个小怪物是一样的.有攻击力,血(100格).如果小怪物有多个数值需要管理,小怪物的血量.小怪物 ...
随机推荐
- hiho #1308 : 搜索二·骑士问题
#1308 : 搜索二·骑士问题 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi:小Ho你会下国际象棋么? 小Ho:应该算会吧,我知道每个棋子的移动方式,马走日象 ...
- mybatis 中 if-test 判断大坑
[<if test="takeWay == '0'">]mybatis的if判断 单个的字符要写到双引号里面才行,改为<if test='takeWay == & ...
- 16.html转pdf的一个小示例
def get_html(request): data = {"name": "alex", "age": 12, "sex&qu ...
- 计算机网络(三),TCP报文段详解
目录 1.TCP(Transmission Control Protocol传输控制协议)作用 2.TCP报文段详解 三.TCP报文段详解 1.TCP(Transmission Control Pro ...
- javascript中继承方式及优缺点(三)
文以<JavaScript高级程序设计>上的内容为骨架,补充了ES6 Class的相关内容,从我认为更容易理解的角度将继承这件事叙述出来,希望大家能有所收获. 1. 继承分类 先来个整体印 ...
- 【封装工程】OI/ACM常用封装
前言 笔者有的时候无聊,就将一些奇怪的东西封装起来. 范围主要是在\(OI\)或者\(ACM\)中的常见数据结构等. 随着笔者的能力的提升,可能会对原来的封装程序进行修改,并且保留原来的版本. [ST ...
- unittest详解(七) 自动生成测试报告
用例执行完成后,执行结果默认是输出在屏幕上,其实我们可以把结果输出到一个文件中,形成测试报告. unittest自带的测试报告是文本形式的,如下代码: import unittest if __nam ...
- Misplaced alignment tab character &
范例: 期望的标题效果:Literature review & Research set-up 在Latex里写的标题:\section{Literature Review & Res ...
- 完美解决前端跨域之 easyXDM 的使用和解析
前端跨域问题在大型网站中是比较常见的问题.本文详细介绍了利用 easyXDM 解决前端跨域的原理细节和使用细节,具体使用时可以在文中代码实例的基础上扩展完成. 0.背景 因个别网络运营商存在 HTTP ...
- CSS Selectors
CSS selectors are used to "find" (or select) HTML elements based on their element name, id ...