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格).如果小怪物有多个数值需要管理,小怪物的血量.小怪物 ...
随机推荐
- 〇一——body内标签之交互输入标签一
今天来搞一下body内的input标签 在一般的网页中,我们经常会遇到一些交互界面,比如注册.登录.评论等环境.在这些交互界面里最常使用的就是input标签. 一.input标签基本使用 input标 ...
- 解决java编译错误:编码 GBK 的不可映射字符 (0x8C)
1. 问题概述: 程序很简单,打印一行字:你好,世界 (使用的工具是:win10自带的记事本.java的jdk:java development kit) 但是在打开终端进行编译时,报出了一个错误:编 ...
- Mysql和ORACLE索引的实现方式
B-Tree和B+Tree 目前大部分数据库系统及文件系统都采用B-Tree或其变种B+Tree作为索引结构. 首先,对单个节点来说,是一个key value结构,key是作引的列,value有两种, ...
- Ubuntu下搜狗输入法乱码
本文适用于Ubuntu 16.04,造冰箱的大熊猫@cnblogs 2018/10/10 参考<这里>,可以不用重新登录 这个问题时不时的出现,很烦人,最简单最粗暴的解决的方法是将&quo ...
- #4 div1E Parentheses 括号匹配
E - Parentheses Time Limit:2000MS Memory Limit:131072KB 64bit IO Format:%lld & %llu Subm ...
- HGOI20190710 题解
Problem A 游戏 有$n (1 \leq n \leq 5)$个硬币初始以"0"(正面),"1"(反面) $m (1 \leq m \leq m)$种操 ...
- hdu_1712(dp,背包)
hdu_1712 \[dp[i][j]\] 表示前i个物品用了j天得到的最大收益 \[ dp[i][j] = max(dp[i-1][j],dp[i][j-k]+ k*v[i][k]) \qquad ...
- ReactJS 结合 antd-mobile 开发 h5 应用基本配置
在 ReactJS 较为初级的使用 antd-mobile 使用时候直接加载 node_modules 文件中的相关 CSS,这个使用方法效率低:更高明的方法则按需加载,需要设置如下: 在 packa ...
- Andorid获取状态栏高度
在应用开发中,有时我们需要用代码计算布局的高度,可能需要减去状态栏(status bar)的高度.状态栏高度定义在Android系统尺寸资源中status_bar_height,但这并不是公开可直接使 ...
- Spring Boot教程(二十九)使用JdbcTemplate操作数据库
使用JdbcTemplate操作数据库 Spring的JdbcTemplate是自动配置的,你可以直接使用@Autowired来注入到你自己的bean中来使用. 举例:我们在创建User表,包含属性n ...