(一)创建和使用类

1、创建dog

在Python中,首字母大写的名称指的是类。类中的函数称为方法;你前面学到的有关函数的一切都适用于方法,唯一重要的差别是调用方法的方式。方法__init__()是一个特殊的方法,每当你根据Dog类创建新实例时,Python都会自动运行它。开头和末尾各有两个下划线,这是一种约定,旨在避免Python默认方法与普通方法发生名称冲突。

方法__init__()包含三个形参:self、name和age。self必不可少,还必须位于其他形参的前面,而且在实参传递时,self是自动传递的,以self为前缀的变量都可供类中的所有方法使用.

#创建一个 Dog 类
class Dog():"""一次模拟小狗的简单尝试"""       #了一个文档字符串,对这个类的功能作了描述。def __init__(self, name, age):"""初始化属性,name和age"""self.name = nameself.age = agedef sit(self):"""模拟小狗命令时蹲下"""print(self.name.title() + " is now sitting.")def roll_over(self):"""模拟小狗被命令时打滚"""print(self.name.title() + " rolled over!")

2、根据类创建实例

str(my_dog.age)将my_dog的属性age的值6转换为字符串,使用句点表示法来调用Dog类中定义的任何方法。

my_dog = Dog('willie', 6)
print("My dog's name is " + my_dog.name.title() + ".")
print("My dog is " + str(my_dog.age) + " years old.")
my_dog = Dog('willie', 6)my_dog.sit()
my_dog.roll_over()

3、创建多个实例

#------创建多个实例----------
my_dog = Dog('willie', 6)
your_dog = Dog('lucy',3)print("My dog's name is " + my_dog.name.title() + '.')
print("My dog is " + str(my_dog.age) + "years old")
my_dog.sit()print("Your dog's name is " + your_dog.name.title() + '.')
print("Your dog is " + str(your_dog.age) + "years old")
your_dog.sit()

(二)使用类和实例

1、编写一个表示汽车的类,它存储了有关汽车的信息

class Car():"""一次模拟车的简单尝试"""def __init__(self, make, model, year ):"""初始化描述汽车的属性"""self.make = makeself.model = modelself.year = yeardef get_descriptive(self):"""返回整洁的描述性信息"""long_name = str(self.year) + ' ' + self.make + ' ' + self.modelreturn long_name.title()my_new_car = Car('audi', 'a4', 2016)
print(my_new_car.get_descriptive())

2、给属性指定初始值

类中的每个属性都必须有初始值,可以在方法__init__()内指定这种初始值,这样就无需包含为它提供初始值的形参。

#创建类
class Car():"""一次模拟车的简单尝试"""#类中创建方法def __init__(self, make, model, year ):"""初始化描述汽车的属性"""self.make = makeself.model = modelself.year = yearself.odometer_reading = 0def get_descriptive(self):"""返回整洁的描述性信息"""long_name = str(self.year) + ' ' + self.make + ' ' + self.modelreturn long_name.title()def read_odometer(self):"""打印一条指出汽车里程的信息"""print("This car has " + str(self.odometer_reading) + " miles on it.")
#创建实例
my_new_car = Car('audi', 'a4', 2016)
#类中方法的引用
print(my_new_car.get_descriptive())
my_new_car.read_odometer()

3、修改属性的值

(1)直接修改属性的值

#方法一修改属性的值
class Car():my_new_car = Car('audi', 'a4', 2016)print(my_new_car.get_descriptive())my_new_car.odometer_reading = 23my_new_car.read_odometer()

(2)通过方法修改属性的值

#方法二修改属性的值
class Car():"""一次模拟车的简单尝试"""#类中创建方法def __init__(self, make, model, year ):"""初始化描述汽车的属性"""self.make = makeself.model = modelself.year = yearself.odometer_reading = 0def get_descriptive(self):"""返回整洁的描述性信息"""long_name = str(self.year) + ' ' + self.make + ' ' + self.modelreturn long_name.title()def read_odometer(self):"""打印一条指出汽车里程的信息"""print("This car has " + str(self.odometer_reading) + " miles on it.")def update_odometer(self, mileage):"""将里程表读数设置为指定的值"""self.odometer_reading = mileageclass Car():new_car = Car('audi', 'a4', 2016)print(new_car.get_descriptive())new_car.update_odometer(100)new_car.read_odometer()

(3)通过方法实现属性值的递增

class Car():"""一次模拟车的简单尝试"""#类中创建方法def __init__(self, make, model, year ):"""初始化描述汽车的属性"""self.make = makeself.model = modelself.year = yearself.odometer_reading = 10def get_descriptive(self):"""返回整洁的描述性信息"""long_name = str(self.year) + ' ' + self.make + ' ' + self.modelreturn long_name.title()def read_odometer(self):"""打印一条指出汽车里程的信息"""print("This car has " + str(self.odometer_reading) + " miles on it.")def update_odometer(self, mileage):"""将里程表读数设置为指定的值,禁止里程数目回调"""if mileage >= self.odometer_reading:self.odometer_reading = mileageelse:print("You can't roll back an odometer!")def increment_odometer(self, miles):"""将里程表读数增加指定的值"""self.odometer_reading += miles#方法三修改属性的值
class Car():new_car = Car('subura', 'outback', 2018)print(new_car.get_descriptive())new_car.update_odometer(5)new_car.read_odometer()new_car.increment_odometer(500)new_car.read_odometer()

(三)继承

此我们可以在前面创建的Car类的基础上创建新类ElectricCar,这样我们就只需为电动汽车特有的属性和行为编写代码。

1、子类的方法

父类必须包含在当前文件中,且位于子类前面。super()是一个特殊函数,帮助Python将父类和子类关联起来。Python调用ElectricCar的父类的方法__init__(),让ElectricCar实例包含父类的所有属性。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author: Christal date: 2021/11/23# 创建类
class Car():"""一次模拟车的简单尝试"""#类中创建方法def __init__(self, make, model, year ):"""初始化描述汽车的属性"""self.make = makeself.model = modelself.year = yearself.odometer_reading = 10def get_descriptive(self):"""返回整洁的描述性信息"""long_name = str(self.year) + ' ' + self.make + ' ' + self.modelreturn long_name.title()def read_odometer(self):"""打印一条指出汽车里程的信息"""print("This car has " + str(self.odometer_reading) + " miles on it.")def update_odometer(self, mileage):"""将里程表读数设置为指定的值,禁止里程数目回调"""if mileage >= self.odometer_reading:self.odometer_reading = mileageelse:print("You can't roll back an odometer!")def increment_odometer(self, miles):"""将里程表读数增加指定的值"""self.odometer_reading += milesclass ElectricCar(Car):"""电动车的独到之处"""def __init__(self, make, model, year):"""初始化父亲的属性"""supper().__init__(make, model, year)my_tesla = ElectricCar('tesla', 'model', 2020)
print(my_tesla.get_descriptive())

2、给子类定义属性和方法

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author: Christal date: 2021/11/23# 创建类
class Car():"""一次模拟车的简单尝试"""#类中创建方法def __init__(self, make, model, year ):"""初始化描述汽车的属性"""self.make = makeself.model = modelself.year = yearself.odometer_reading = 10def get_descriptive(self):"""返回整洁的描述性信息"""long_name = str(self.year) + ' ' + self.make + ' ' + self.modelreturn long_name.title()def read_odometer(self):"""打印一条指出汽车里程的信息"""print("This car has " + str(self.odometer_reading) + " miles on it.")def update_odometer(self, mileage):"""将里程表读数设置为指定的值,禁止里程数目回调"""if mileage >= self.odometer_reading:self.odometer_reading = mileageelse:print("You can't roll back an odometer!")def increment_odometer(self, miles):"""将里程表读数增加指定的值"""self.odometer_reading += milesclass ElectricCar(Car):"""电动车的独到之处"""def __init__(self, make, model, year):"""初始化父亲的属性""""""初始化电动汽车的独特属性"""super().__init__(make, model, year)self.battery_size = 70def describe_battery(self):"""打印一条描述电瓶容量的信息"""print("This car has a " + str(self.battery_size) + "-kWh battery.")my_tesla = ElectricCar('tesla', 'model', 2020)
print(my_tesla.get_descriptive())
my_tesla.describe_battery()

3、重写父类的方法

对于父类的方法,只要它不符合子类模拟的实物的行为,都可对其进行重写。为此,可在子类中定义一个与父类方法同名的方法。这样,Python只关注子类中定义的相应方法。

4、将实例作为属性

类中添加的细节越来越多时,属性和方法清单以及文件会越来越长的,此时,需要将类的一部分作为一个独立的类提取出来,将大类拆分成多个协同工作的小类。

我们定义了一个名为Battery的新类,它没有继承任何类。方法__init__()除

self外,还有另一个形参battery_size,这个形参是可选的;在ElectricCar类中添加了名为self.battery 的属性,这行代码让Python创建了一个新的Battery实例,现在每个ElectricCar实例都包含一个自动创建的Battery实例。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author: Christal date: 2021/11/24# 创建类
class Car():"""一次模拟车的简单尝试"""#类中创建方法def __init__(self, make, model, year ):"""初始化描述汽车的属性"""self.make = makeself.model = modelself.year = yearself.odometer_reading = 10def get_descriptive(self):"""返回整洁的描述性信息"""long_name = str(self.year) + ' ' + self.make + ' ' + self.modelreturn long_name.title()def read_odometer(self):"""打印一条指出汽车里程的信息"""print("This car has " + str(self.odometer_reading) + " miles on it.")def update_odometer(self, mileage):"""将里程表读数设置为指定的值,禁止里程数目回调"""if mileage >= self.odometer_reading:self.odometer_reading = mileageelse:print("You can't roll back an odometer!")def increment_odometer(self, miles):"""将里程表读数增加指定的值"""self.odometer_reading += milesclass Battery():"""一次模拟电动汽车电瓶的简单尝试"""def __init__(self, battery_size=70):"""初始化电瓶的属性"""self.battery_size = battery_sizedef describe_battery(self):"""打印一条描述电瓶容量的信息|"""print("This car has a " + str(self.battery_size) + "-kWh battery.")def get_range(self):"""打印一条消息,之处电瓶的续航里程"""if self.battery_size ==70:range = 240elif self.battery_size ==85:range = 270message = "This car can go approximately " + str(range)message += " miles on a full charge."print(message)class EletricCar(Car):"""电动汽车的独特之处"""def __init__(self, make, model, year):"""初始化父类的属性,在初始化电动汽车独有的属性"""super().__init__(make, model, year)self.battery = Battery()  #独特属性初始化,用类表示my_tesla = EletricCar('tesla', "model's", 2021)
print(my_tesla. get_descriptive())my_tesla.battery.describe_battery()
my_tesla.battery.get_range()

(四)导入类

随着你不断地给类添加功能,文件可能很长,即便你妥善地使用了继承亦如此。为遵循Python的总体理念,应让文件尽可能整洁。Python允许将类存储在模块中,然后在主程序中导入所需的模块。

1、导入单个类

将类Car单独保存为car.py,然后建立my_car.py文件,文件代码如下

from car import Carmy_new_car = Car('audio', 'a4', 2021)
print(my_new_car.get_descriptive())my_new_car.odometer_reading = 70
my_new_car.read_odometer()

2、从一个模块中导入多个类

将类Car、ElectricCar和Battery全部写入class_electricar1,实现在一个模块中存储多个类,在my_car.py中可以实现多个类的导入,然后用户可以根据需要创建每个类的任意数量实例。

from class_electricar1 import Car, EletricCarmy_new_car = Car('audio', 'a4', 2021)
print(my_new_car.get_descriptive())my_new_car.odometer_reading = 70
my_new_car.read_odometer()my_tasla =  EletricCar('tesla', "model's", 2021)
print(my_tasla.get_descriptive())my_tasla.odometer_reading =500
my_tasla.battery.describe_battery()
my_tasla.battery.get_range()

3、导入整个模块

需要后续使用句点表示需要访问你的类,

import class_electricar1 as carmy_car = car.Car('aodi', 'a4',2020)
print(my_car.get_descriptive())my_tesla = car.EletricCar('tesla', 'roadster', 2016)
print(my_tesla.get_descriptive())

4、导入模块中的所有类

语句类型为:from module_name import *, 不推荐使用,在此不做过多介绍。同样也可以在一个模块中导入另外一个模块,导入的方法与上述方法一致。

(五)Python标准库

Python标准库是一个模块,可以使用import语句导入。字典让你能够将信息关联起来,但是不记录添加键—值对的顺序。要创建字典并记录键—值对的添加顺序,可使用模块collections中的OrderedDict类。

from collections import OrderedDictfav_lans = OrderedDict()fav_lans['jen'] = 'python'
fav_lans['sarah'] = 'c'
fav_lans['edward'] = 'C#'
fav_lans['phil'] = 'python'for name, language in fav_lans.items():print(name.title() + "'s favoriate languages is " \+ language.title() + ".")
print("The following languages have been mentioned:")for language in set(fav_lans.values()):  # 遍历字典的所有的值# 有没有set()函数都可以提取字典中所有的value,# 加入set()之后,保证不会重复print(language.title())

(六)类编码风格

类名称采用驼峰命名法,即类名中的每个单词的首字母大写,不适用下划线。实例名和模块名都采用小写格式,并在单词之间加上下滑线。

每个类后面都包含一个文档字符串,简单描述类的功能,每个模块也都包含一个文档字符串,用于对其中的类用于做什么进行描述。

Python 3 《Class》入门练习相关推荐

  1. python web 框架例子_最快的 Python Web 框架入门

    原标题:最快的 Python Web 框架入门 来源:Python开发 ID:PythonPush 速度比较 框架 实现基础 每秒请求数 平均时间 Sanic Python 3.5 + uvloop ...

  2. Python update 函数 - Python零基础入门教程

    目录 一.Python update 函数简介 二.Python update 函数和 ChainMap 函数区别 三.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 > ...

  3. Python基础语法入门篇(一)

    Python基础语法入门篇(二) 1. 注释 在我们工作编码的过程中,如果一段代码的逻辑比较复杂,不是特别容易理解,可以适当的添加注释,以辅助自己 或者其他编码人员解读代码. 注释是给程序员看的,为了 ...

  4. Python简介和入门

    原文地址:http://www.jianshu.com/p/56ac30b842ef 1.Python前世今生 1.1.Python历史 Python的创始人: Guido van Rossum:之所 ...

  5. Python语法学习测试记录(Python编程从入门到实践——Eric Matthes著)

    注:工作之余,学习一门脚本语言,选择了当下火热的Python.2020-05-27日开始学习Python基础语法,期间参考<Python编程从入门到实践--Eric Matthes著>一书 ...

  6. Python 字典(Dictionary) get()方法

    Python 字典(Dictionary) get()方法 描述 Python 字典(Dictionary) get() 函数返回指定键的值,如果值不在字典中返回默认值. 语法 get()方法语法: ...

  7. 怎么读懂python语句_Python入门基础知识点总结,一点文章就能让你看懂Python

    Python标识符 在 Python 里,标识符由字母.数字.下划线组成. 在 Python 中,所有标识符可以包括英文.数字以及下划线(_),但不能以数字开头. Python 中的标识符是区分大小写 ...

  8. Python 字典(Dictionary)

    Python 字典(Dictionary) 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在 ...

  9. python数据分析从入门到精通电子工业出版社_荐书丨Python数据分析从入门到精通...

    点击上方"程序人生",选择"置顶公众号" 第一时间关注程序猿(媛)身边的故事 采用Python 3.6版本,兼容Python 3.X等众多版本 一本书搞定IPy ...

  10. python入门必备指南-致Python初学者 Anaconda入门使用指南完整版

    打算学习 Python 来做数据分析的你,是不是在开始时就遇到各种麻烦呢? 到底该装 Python2 呢还是 Python3 ? 为什么安装 Python 时总是出错? 怎么安装工具包呢? 为什么提示 ...

最新文章

  1. Visual Studio2005无法启动web调试的真正原因
  2. 推荐一款最好的服务器备份软件
  3. ActiveMQ入门系列二:入门代码实例(点对点模式)
  4. Kafka安装和基本指令
  5. 最小安装下如何打开网络连接
  6. 【转】Qt调用dll中的功能函数
  7. java语言的命题原则_重庆自考《Java语言程序设计(一)》课程全国统一命题考试说明...
  8. Word转PDF方法(jacob插件)
  9. 【web前端期末大作业】html网上在线书城大学生静态网页 大学生html当当书城仿站 网上书城购物网页作业HTML
  10. 电话机器人成骚扰机器?程序员可不背锅
  11. 计算机进入休眠状态如何唤醒,电脑进入睡眠状态怎么快速唤醒图文教程
  12. redis-replicator使用的一点点心得
  13. PHPStudy 安装amqp扩展
  14. Matlab中 intlinprog函数用法简介
  15. 计算机组成原理实验一:运算器组成的实验
  16. 机器学习K-均值——nonzero(clusterAssment[冒号,0].A==cent
  17. Linux系统下的hadoop常用命令
  18. 微信OAuth授权获取用户OpenId-JAVA
  19. 【STM32编程】一个定时器生成多路PWM波形的原理和方法
  20. PCB走线和过孔通流能力的标准、影响因素及其计算软件

热门文章

  1. failed to push some refs to 'https://e.coding.net/xxx/xxx.git fetch = +refs/heads/*:refs/
  2. STM32F103ZE uIP DM9051 SPI以太网移植指南
  3. 初级算法-10. 有效的数独
  4. linux yum ku,Linux基础知识:Linux yum 配置与使用
  5. Redis主从复制架构初步探索 http://www.sxt.cn/info-1750-u-324.html#SXT_h2_11
  6. WINDOWS如何用自己的电脑做一个网站服务器
  7. 关于java中的setOut()方法
  8. WIN10 USB3.0接口无法识别U盘-未知usb端口重置失败的解决
  9. 微信早安定时推送 简单方法教程(windows通用)
  10. SQL解决最多同时在线人数问题(同时视频观看人数,同时浏览人数,同时等车人数)