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格).如果小怪物有多个数值需要管理,小怪物的血量.小怪物 ...
随机推荐
- JS 转Boolean的两张方法
// 1.Boolean() console.log(Boolean(123)); // true console.log(Boolean(undefined)); // false console. ...
- springboot jpa 创建数据库以及rabbitMQ分模块扫描问题
在使用jpa过程中,如果没有在配置中加入自动创建实体对于的sql,则需要提前创建建表语句 spring.jpa.properties.hibernate.show_sql=true spring.jp ...
- mysql向redis导入数据
数据库结构如下 如果是linux系统下,如此整备数据 SELECT CONCAT( "*10\r\n", '$', LENGTH(redis_cmd), '\r\n',redis_ ...
- [洛谷P1607] 庙会班车
题目描述 Although Farmer John has no problems walking around the fair to collect prizes or see the shows ...
- 批量查询 xml的方式 还一种是表变量
var adds1 = getoneCityList.Select(l => { return new { YDCode = l.YDCode, SJQH = l.SJQH }; });var ...
- CSS的 背景属性
㈠背景色 background-color ⑴background-color 属性设置元素的背景颜色. ⑵元素背景的范围: background-color 属性为元素设置一种纯色.这种颜色会填充 ...
- Nowcoder Removal ( 字符串上的线性 DP )
题目链接 题意 : 给出长度为 n 的字符串.问你准确删除 m 个元素之后.能产生多少种不同的子串 分析 ( 参考博客 ): 可以考虑线性 DP 解决这个问题 试着如下定义动态规划数组 dp[i][ ...
- input输入框如何只能输入非零开头的正整数
input输入框如何只能输入非零开头的正整数 ********* 废话不多说,先来代码 ********* case1: 原生html + javascript <body> <!- ...
- HDU 3669 [Cross the Wall] DP斜率优化
问题分析 首先,如果一个人的\(w\)和\(h\)均小于另一个人,那么这个人显然可以被省略.如果我们将剩下的人按\(w[i]\)递增排序,那么\(h[i]\)就是递减. 之后我们考虑DP. 我们设\( ...
- oracle中更新关键字merge和 with as关键字
merge是oracle特有的语句,两表关联操作(增.删.改)就效率非常高 merge into table_name alias1 using (table|view|sub_query) alia ...