学到“类”这一章的时候,应该算是真正接触面向对象编程了,与之前的流程化的完全不一样了,所以学得稍显吃力,有些没写清楚或写错的请及时指正。

第九章 类

1.创建和使用类

个人理解,类就是把现实中的一些对象的属性和功能进行抽象。

比如:

把人作为对象,每个人都有姓名、年龄、性别、身高、体重等信息,

这些可以归纳作为属性。

每个人都会坐、站、躺、走等,

这些可以归纳为方法。

方法和属性的区别,个人理解为:

因为方法不是一个变量能表示,而是一些行为,

而属性是简单的信息,能够直接用一段文字或者几个数字表示。

(1)创建类

class 类名():

*:类名通常首字母大写。

(2)__init __()方法:类里面的第一个方法

每当利用类创建实例时,这个方法都会自动运行。

def __init__(self,para_1,para_2):

self.para_1 = para_1

self.para_2 = para_2

*:1.init前后均为2个下划线!2个下划线!2个下划线!

2.第一个形参代表了这个类,可以是self,也可以是其他名字。

3.代码块中的两句话,相当于在类实例化时,将传递过来的实参传给了属性。

4.以self为前缀的变量可以给类中所有的方法使用。

可以理解为,以self为前缀的变量就是属性,属性可以在类中任何地方使用。

5.定义其他方法的时候,通常都将self作为参数。相当于确保所有方法都能使用属性。

(3)根据类创建实例

定义了一个类以后,可使用以下语句来创建实例。也就是根据类生成对象。

实例名 = 类名(实参)

*:1.实例的名称通常使用小写,方便地与类名相区分;

2.访问属性或调用方法时,使用句点(.)

即: 类名.属性名 and 类名.方法

小例子

class People():

'''尝试对人进行简单的抽象。'''

def __init__(self,name,sex,age):

'''初始化姓名、性别和年龄'''

self.name = name

self.sex = sex

self.age = age

def sit(self):

'''模拟人会坐下'''

print(self.name.title() + 'is sitting!')

#实例化一个人

zhangsan = People('zhangsan','man','18')

#访问实例的属性

print('My name is ' + zhangsan.name)

#调用实例的方法

zhangsan.sit()

将上面的代码存储为people.py,然后运行,结果如下:

image.png

2.使用类和实例

(1)给属性指定默认值

这个可以在定义类的init()方法时设置。

书上说:“类中每个属性都必须有初始值,哪怕是0或者空字符串。”(P143)

这句话不是很理解,因为他自己的例子也么有给初始值!

抛开这个不管,还有一种方法设置默认值!

那就是在init()方法里面直接指定。

def __init__(self,name,sex,age):

'''初始化姓名、性别和年龄'''

self.name = name

self.sex = sex

self.age = age

self.country = 'China'

*:以这种方法指定默认值时,定义init()时不需要包含country这个形参。

并且,实例化的时候,不需要也不允许传递这个参数。否则会报错。

(2)修改属性的值

总共两种方法:

1.直接修改属性的值

(接上例)

实例化:zhangsan = People('zhangsan','man','18')

直接修改:zhangsan.sex = 'woman'

2.通过方法修改

需要在类里面定义一个修改属性的方法,然后调用它来修改属性。

*:当属性的默认值时在init()方法里面直接指定时,只能这样修改属性。

(接上例)

在People类中定义一个change_country()的方法:

def change_country(self,new_country):

self.country = new_country

*:注意这个self不能少!这个self不能少!这个self不能少!

实例化:zhangsan = People('zhangsan','man','18')

通过方法修改属性:zhangsan.change_country('USA')

3.继承

1.子类会继承父类的所有属性和方法,且还可以自己定义新的。

2.创建子类时,父类必须包含在当前的文件中,且位于子类的前面。

(在后面用到了导入以后,应该可以不需要这样了,只需先导入父类)

3.定义子类时,要用到父类的名字:class 子类名(父类名):

(1)子类的init()方法

子类的init()方法需要先初始化父类的属性,通过下面的语句来实现:

def __init__(self,name,sex,age)

"""初始化父类的属性"""

super().__init__(name,sex,age)

*:super()是一个特殊函数,实现将父类和子类关联起来。

(2)给子类定义属性和方法

这个与类的定义时一样的

(3)重写父类的方法

很简单,定义一个方法,名字与父类中的方法名一样就行。

(4)将实例用作属性:也就是在一个类中调用另一个类的实例作为属性

这个实现了将大型的类拆为很多个小类。

下面看一个小栗子,将上面讲到的继承相关的串一下:

class People():

'''尝试对人进行简单的抽象。'''

def __init__(self,name,sex,age):

'''初始化姓名、性别和年龄'''

self.name = name

self.sex = sex

self.age = age

self.country = 'China'

def sit(self):

'''模拟人会坐下'''

print(self.name.title() + ' is sitting!')

def change_country(self,new_country):

self.country = new_country

class Bodysize():

'''定义一个身体数据类,等下实现将实例作为属性。'''

def __init__(self,height,weight ):

self.height = height

self.weight = weight

def body_data(self):

print("I'm " + self.height + "cm tall and "+

self.weight + "kg weight.")

class Teacher(People):

'''定义一个老师类,继承了人这个类'''

def __init__(self,name,sex,age):

'''初始化人类的属性'''

super().__init__(name,sex,age)

#定义一个子类的属性

self.subject = 'Physics'

self.size = Bodysize('175','70')

#定义一个子类的方法

def simple_introduction(self):

print("I'm a " + self.subject + " Teacher!")

#重写一个父类的方法

def sit(self):

print(self.subject + " Teacher is sitting!")

#实例化一个老师对象

lisi = Teacher('lisi','man','28')

#调用子类中新定义的方法

lisi.simple_introduction()

#调用Bodysize实例的方法

lisi.size.body_data()

#调用子类中重写的父类的方法

lisi.sit()

运行结果:

image.png

4.导入类

将类存储在模块中,然后在主程序中导入,可以使文件更加简洁和清晰。

导入模块/函数的几种方法(与上一章的导入函数类似):

1.直接导入整个模块

import 模块名

**:调用时,需要使用句点(.)指定模块和类。

即:模块名.类名()

2.导入模块中的特定类

from 模块名 import 类名

**:使用这种方法时,实例化指定的类时,不需要使用句点(.)指定模块,

可以直接用类名来实例化。

3.导入模块中的多个特定类

from 模块名 import 类名1,类名2

**:也就是用逗号(,)实现多个类同时导入。

4.导入模块中所有的类

from 模块名 import *

**:使用这种方法时,调用该模块中的所有类都不需要使用句点(.)指定模块名。

这种方法不推荐,理由和导入函数一样的,这种方法都是不推荐的。

5.在一个模块中导入另一个模块

这个没什么特别的。需要啥就导入啥。

5.Python标准库

这一节实际上没说什么,就是告诉你:

Python标准库实际上就是一组模块,里面有很多类和函数。

6.类编码风格

这个又是告诉你很多“龟腚”,但是,这些龟腚是有用的!

熟悉编码风格,养成良好的习惯,

一来可以让你的代码更清晰,二来也方便别人阅读指点。

1.类名中的每个单词的首字母都要大写,而且不用下划线;

2.实例名和模块名都使用小写,用下划线分隔单词;

3.类和模块的定义后面写一个文档字符串(跟函数一样的);

4.合理使用空行,但不要滥用:

模块里面的不同类之间,用2个空行;

类里面的不同方法之间使用一个空行;

5.需要同时导入标准库中的模块和自己写的模块时,

先导入标准库的,

然后加一个空行,

再导入自己写的模块。

-->这样的好处是让别人知道你的模块都来自那些地方。

这一章写的很困难,不过梳理一下,自己是可以搞清楚多了!

如果哪里有错漏,请不吝赐教!

python输入姓名 性别身高_Python编程:从入门到实践 Day9相关推荐

  1. python输入姓名 性别身高_python简单实现学生管理系统

    #!/usr/bin/env python # -*- coding: UTF-8 -*- # Author:Du Fei import os #学号,姓名,年龄,性别,身高 allStudentsL ...

  2. python输入姓名 性别身高_孤荷凌寒自学python第十一天初识Python的字典类

    孤荷凌寒自学python第十一天初识Python的字典类 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) Python的字典其实是一张二维对照表 下面举例说明: 键名Key 姓名 性别 身高 ...

  3. python 从入门到实践_Python编程从入门到实践日记Day15

    Python编程从入门到实践日记Day15 第5章 字典(三) 1.使用字典(三) -由类似对象组成的字典 在前面的示例中,字典存储的是一个对象(游戏中的一个外星人)的多种信息,但你也可以使用字典来存 ...

  4. python tk combobox设置值为空_Python编程从入门到实践日记Day24

    Python编程从入门到实践日记Day24 第6章 用户输入和while循环(五) 1. 使用while循环来处理列表和字典(二) - 删除包含特定值的所有列表元素 在之前我们学过可以使用函数remo ...

  5. python从入门到实践学习笔记_Python编程从入门到实践:学习笔记1(第二章)

    开通博客我用的理由是:读书学习时记笔记,一方面为了回顾,一方面为了督促自己.fighting! 学习Python,我买了Python编程从入门到实践. 我将从第二章开始记录我认为我以后会忘记以及重要的 ...

  6. python从入门到实践_Python编程从入门到实践日记Day32

    Python编程从入门到实践日记Day32 第7章 函数(八) 1.传递任意数量的实参 - 使用任意数量的关键字实参 有时候,需要接受任意数量的实参,但预先不知道传递给函数的会是什么样的信息.在这种情 ...

  7. python编程入门到实践笔记习题_Python编程从入门到实践笔记——列表简介

    python编程从入门到实践笔记--列表简介 #coding=utf-8 #列表--我的理解等于c语言和java中的数组 bicycles = ["trek","cann ...

  8. python入门到实践试题及答案_python编程:入门到实践练习答案

    [实例简介] 书本<python编程:入门到实践>的课后练习答案 [实例截图] [核心代码] 练习答案 ├── Solutions - Chapter 10.docx ├── Soluti ...

  9. python编程从入门到实践第八章_Python编程从入门到实践的第三天

    #-*- coding = utf-8 -*- #今天是12月24号了,天气阴,不是太好,这是我看Python编程从入门到实践的第三天,现在是上午,我是皮卡丘,这是我敲的第八章的代码 #第八章练习题1 ...

最新文章

  1. SQL概念及DDL语句
  2. 查看文件more、less
  3. 这可能是这次疫情最搞笑的事情,可看着看着却鼻酸了
  4. java cpu过高排查_涨薪秘籍:JAVA项目排查cpu负载过高
  5. 服务器采用虚拟化应用漂移,虚拟化技术在数字化医院建设中的应用
  6. 英国帝国理工学院招聘研究助理,医学影像分析方向
  7. Python导函数的一些相关
  8. c语言单片机串口通讯,单片机C语言之串口通信协议
  9. Alibaba Druid 源码阅读(三) 数据库连接池初始化探索
  10. [SCOI2003]严格N元树
  11. 重复insmod同一个模块导致段错误
  12. 优化性能一点总结,供大家参考
  13. 想做数字孪生项目?这款数据可视化软件值得你了解
  14. 中兴防火墙配置_中兴通讯防火墙成功案例
  15. Python爬虫介绍
  16. 小单刷题笔记之鲁卡斯队列(浮点数比较)
  17. 悠悠web(1)-HTML基本结构
  18. PL-VIO学习+注释
  19. 【研究总结】基于出租车GPS轨迹数据的相关研究
  20. 【CSS】笔记2-复合选择器、显示模式、背景

热门文章

  1. TP-link家庭无线路由安装及设置方法
  2. TOM企邮后台管理员轻松管理
  3. 安捷伦MSOX4104A示波器/Agilent MSO-X4104A
  4. python excel xlwt_Python读写Excel,擅用xlwt模块
  5. 2021年内蒙古高考成绩查询一分一段,2021年内蒙古高考成绩排名及一分一段表
  6. Jquery跳转页面的方式
  7. 龙笔记软件测试工程师,一个软件测试工程师的加班经历
  8. 2.14 图片临摹面板详解 [Illustrator CC教程]
  9. Win10升级后 chrome内核浏览器网页打开卡慢的解决办法
  10. 支付宝支付+退款(公钥证书方式+普通公钥方式)app+java