Python 是一种面向对象的编程语言。在面向对象编程中,你编写表示现实世界中的事务和情景的类,并基于这些类来创建对象。

编写类时,你定义的一大类对象都有的通用行为。基于类创建对象时,每个对象都自动具备这种通用行为,然后可根据需要赋予每个对象独特的个性。

根据类来创建对象被称为实例化,这让你能够使用类的实例。

在这一讲中,你将学习:如何编写类;

如何使用属性在类中存储信息,以及如何编写方法,以让类具备所需的行为;

如何编写方法__init__() ,以便根据类创建包含所需属性的 实例。

如何修改实例的属性——包括直接修改以及通过方法进行修改。

使用继承可简化相关类的创建工作;将一个类的实例用作另一个类的属性可让类更简洁。

通过将类存储在模块中,并在需要使用这些类的文件中导入它们,可让项目组织有序。

Python标准库,并见识了一个使用模块collections 中 的OrderedDict 类的示例。

编写类时应遵循的Python约定。

8.1创建和使用类

使用类可以模拟任何东西。

下面我们根据一个例子来更好的理解类:摘自《Python编程:从入门到实践》

8.1.2 创建Dog类

对于大多数狗,他们都有名字和年龄,它们还会蹲下和打滚。我们来创建一个Dog类包含他们。这个类让Python创建表示小狗的对象(实例)。

蹲下(sit())打滚(roll_over())

class Dog():

"""一次模拟小狗的简单尝试"""

def _init_(self, name, age):

"""初始化属性name和age"""

self.name = name

self.age = age

def sit(self):

"""模拟小狗被命令时蹲下"""

print(self.name.title() + " is now sitting.")

def roll_over(self):

"""模拟小狗被命令时打滚"""

print(self.name.title() + " rolled over")

第一行代码,定义了一个名为Dog的类。

记住在Python中,首字母大写的名称指的是类。

类中的函数称为方法,方法__init__()是一个特殊的方法,每当你根据Dog类来创建实例时,会自动运行它。

在这个方法名称中,开头和末尾各有两个下划线,这是为了避免Python默认方法与普通方法发生冲突。

方法__init__()包含三个形参:self, name,age。其中self必不可少,还必须位于其他形参前面。

为什么必须包含形参self呢?

因为Python调用方法__init__()来创建实例时,将自动传入实参self。

每个与类相关联的方法调用都自动传递实参self,它是一个指向实例本身的引用,让实例能够访问类中属性和方法。

每次我们根据Dog类创建实例时,都只需给后面两个形参提供值,self会自动传递。

self.name = name和self.age = age都有前缀self。以self为前缀的变量都可供类中的所有方法使用,我们还可以通过类的任何实例来访问这些变量。

self.name = name获取存储在形参name中的值,并将其存储在变量name中,然后该变量被关联到当前创建的实例。self.age = age 与此类似。向这样可通过实例访问的变量称为属性。

方法sit()和roll_over()不需要额外的信息,因此只有一个形参self。当前这两个方法都只是简单的打印一条消息。

注意:在Python2.7中创建类时,在括号类包含单词object

class Dog(object):

8.1.2根据类创建实例

接下来我们创建一个表示小狗的实例

class Dog():

"""一次模拟小狗的简单尝试"""

def _init_(self, name, age):

"""初始化属性name和age"""

self.name = name

self.age = age

def sit(self):

"""模拟小狗被命令时蹲下"""

print(self.name.title() + " is now sitting.")

def roll_over(self):

"""模拟小狗被命令时打滚"""

print(self.name.title() + " rolled over")

my_dog = Dog('whilie', 6)

print("My dog's name is " + my_dog.name.title() + ".")

print("My dog is " + str(my_dog.age) + " years old.")

我们根据类创建了一个名为whillie 年龄位6的小狗实例。Python调用方法__init__(),并接受我们传递的实参,返回一个表示小狗的实例,并将其存储在变量my_dog中。

其中代码:my_dog.name 是句点表示法,以此来访问属性。

输出

My dog's name is Willie.

My dog is 6 years old.

如何访问类中的其他方法呢 ?

和访问属性的方法类似——句点表示法

my_dog.sit()

my_dog.roll_over()

输出

Willie is now sitting.

Willie rolled over!

如果需要创建多个实例,多次调用类即可。

8.2 使用类和实例

类编写好后,就要学习如何使用类了。其中很重要的一个任务是学习如何修改实例的属性。

8.2.1 给属性指定默认值

类中的每个属性都必须有初始值,哪怕这个值是0或空字符串。如果你给属性指定了默认值,定义类是就无需包含为他提供初值的形参。

class Dog():

"""一次模拟小狗的简单尝试"""

def _init_(self, name):

"""初始化属性name和age"""

self.name = name

self.age = 6

def sit(self):

"""模拟小狗被命令时蹲下"""

print(self.name.title() + " is now sitting.")

def roll_over(self):

"""模拟小狗被命令时打滚"""

print(self.name.title() + " rolled over")

8.2.2 修改属性的值

直接修改——通过实例访问它,然后修改

my_dog.age = 10

通过方法修改——编写一个方法来修改属性

class Dog():

"""一次模拟小狗的简单尝试"""

def _init_(self, name):

"""初始化属性name和age"""

self.name = name

self.age = 6

def sit(self):

"""模拟小狗被命令时蹲下"""

print(self.name.title() + " is now sitting.")

def roll_over(self):

"""模拟小狗被命令时打滚"""

print(self.name.title() + " rolled over")

def update_age(self, num)

self.age = num

my_dog.update_age(10)

my_dog.update_age(10) 这里调用方法,并传递给形参num一个值,将num的值赋给属性age。

8.3 继承

编写类时,并非要从空白开始。

当你编写的类是另一个现成类的特殊版本,可使用继承

一个类继承另一个类时,他将自动获得另一个类的所有属性和方法;原有的类称为父类,而新类称为子类。子类继承了父类的所有属性和方法,同时还可以定义自己的属性和方法。

8.3.1 子类的方法__init__

创建子类的实例时,需要先给其父类的所有属性赋值。

class Dog():

"""一次模拟小狗的简单尝试"""

def _init_(self, name, age):

"""初始化属性name和age"""

self.name = name

self.age = age

def sit(self):

"""模拟小狗被命令时蹲下"""

print(self.name.title() + " is now sitting.")

def roll_over(self):

"""模拟小狗被命令时打滚"""

print(self.name.title() + " rolled over")

class Dog_2(Dog):

"""另一个特殊的Dog类"""

def __init__(self, name, age)

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

super().__init__(name, age)

my_dog_2 = Dog_2('wodfg', 7)

my_dog_2.sit()

my_dog_2.roll_over()

定义子类时,必须在括号内指定父类的名称。

方法super()是一个特殊函数,帮助Python将父类和子类关联起来。这行代码让Python调用父类的方法__init__(),让子类包含父类所有的属性。父类也称其为超类,名称super由此而来。

在Python2.7中继承语法稍有不同,函数super需要两个形参:子类名和对象self

class Dog_2(Dog):

"""另一个特殊的Dog类"""

def __init__(self, name, age)

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

super(Dog_2, self).__init__(name, age)

我们创建好子类之后可以给子类定义属性和方法。

如果父类中的某个方法并不符合你的预期,你可对其进行重写:在子类中定义一个方法,方法名与父类的相同。这样Python只会使用子类中的方法。

如果发现自己的类代码太长,不便于阅读,可以将一部分作为一个独立的类提取出来。

8.4 导入类

当你不断给类添加功能,代码变长。为了让代码更简洁,你可以将类存储在模块中,然后再主程序中导入所需的模块。

我们将Dog类存储在一个名为dog.py的模块中

导入单个类

from dog import Dog

我们也可以在一个模块中存储多个类,需要哪个就导入哪个。

form dog import Dog, Dog_2

导入整个模块

import dog

导入模块中所有类

from module_name import *

不推荐使用这种导入方式,首先,这种方式没有明确指出你使用了模块中的那些类。

如果你不小心导入一个与程序文件中其他东西同名的类,将引发难以诊断的错误。

需要从一个模块中导入很多类时,最好导入整个模块,并使用module_name.calss_name语法来访问类。

这样做,虽然文件开头并没有列出用到的所有类,但你清楚的直到在程序的哪些地方使用了导入的模块,还避免了导入模块中的每个类可能引发的名称冲突。

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

有时候需要将类分散到多个模块中,以免模块太大,或者在同一个模块中存储不相关的类。

将类存储在不同模块中时,你可能会发现一个模块中的类依赖于另一个模块中的类。

在这种情况下,可在前一个模块中导入必要的类。

8.5 Python标准库

Python标准库是一组模块,安装的Python都包含它

可使用标准库中任何函数和类,为此只需在程序开头包含一条简单的import语句。

下面来看模块collections中的一个类——OrderedDict。

字典让你能够将信息关联起来,但它们不记录你添加键-值对的顺序。

要创建字典并记录其中的键值对添加顺序,可使用模块collections中的OrderedDict类。

OrderedDict实例的行为几乎与字典相同,区别只在于记录键值对的添加顺序。

from collections import OrderedDict

favourite_languages = OrderedDict()

favourite_languages['jen'] = 'Python'

favourite_languages['sarah'] = 'c'

favourite_languages['edward'] = 'ruby'

favourite_languages['phil'] = 'pyython'

for name, language in favourite_languages.items():

print(name.title() + "'s favourite language is " + language.title() + ".")首先从模块collections中导入了OrderedDict类。

然后创建了一个实例,并将其存储到favourite_languages中。

这里并没有使用花括号,而是调用OrderedDict()来创建一个空的有序字典,并将其存储在favourite_languages中。

加下来我们以每次一对的方式添加(名字-语言)对。

8.6 类编码风格

你必须熟悉有些与类相关的编码风格问题,在你编写的程序较复杂时尤其如此。类名应采用驼峰命名法,即将类名中的每个单词的首字母都大写,而不使用下划线。

实例名和模块名都采用小写格式,并在单词之间加上下划线。

对于每个类,都应紧跟在类定义后面包含一个文档字符串。

这种文档字符串简要地描述类的功能,并遵循编写函数的文档字符串时采用的格式约定。

每个模块也都应包含一个文档字符串,对其中的类可用于做什么进行描述。

可使用空行来组织代码,但不要滥用。

在类中,可使用一个空行来分隔方法;而在模块中,可使用两个空行来分隔类。

需要同时导入标准库中的模块和你编写的模块时,先编写导入标准库模块的import 语句,

再添加一个空行,然后编写导入你自己编写的模块的import语句。

在包含多 条import 语句的程序中,这种做法让人更容易明白程序使用的各个模块都来自何方。

码字不易 对你有帮助的话 关注一下专栏

喜欢+收藏+评论 谢谢大家 抱拳了

python创建一个类初始化两个变量name、age_Python小白入门:第八讲||类相关推荐

  1. python词云改颜色_使用Python创建一个与图像颜色匹配的词云

    原标题:使用Python创建一个与图像颜色匹配的词云 来自:https://www.linuxmi.com/ 我用Python造了一个词云.不过这次创建的是与图像颜色匹配的词云. 使用Python w ...

  2. 使用python创建一个二维码生成器

    QR codes are everywhere more and more businesses are using them to link to user manuals for products ...

  3. 创建一个含有初始化数据库的mysql docker镜像

    创建一个含有初始化数据库的mysql docker镜像 一.准备一个用于数据库初始化的.sql文件 二.编写Dockerfile文件 三.编译Dockerfile文件 1.在Dockerfile所在目 ...

  4. python创建一个文件并写入_python创建文件并写入

    python怎么以追加的方式写文件? Python 3.5 想将从1到10写入一个文件并且自动换行 现在需要一个写文件方法,将selenium的脚本运行结果写入test_result.log文件中 首 ...

  5. 【LINUX】——linux如何使用Python创建一个web服务

    问:linux如何使用Python创建一个web服务? 答:一句话,Python! 一句代码: /usr/local/bin/python -m SimpleHTTPServer 8686 > ...

  6. python创建一个空的dataframe_python 创建一个空dataframe 然后添加行数据的实例

    实例如下所示: import pandas as pd import re import math dframe1 = pd.read_excel("window regulator分析报告 ...

  7. python中一个星号(*)与两个星号(**)的作用

    python中一个星号(*)与两个星号(**)的作用 目录 python中一个星号(`*`)与两个星号(`**`)的作用 一.一般用法 概述: 1.`*`表示乘法,`**`表示幂 2.`*`表示打包解 ...

  8. Python 创建一个二维列表

    Python 创建一个二维列表 空二维列表 lis=[[] for i in range(5)]for i in range(5):lis.append([]) 普通二维列表 lis=[[i for ...

  9. 用python创建一个新文件_Python创建文件和追加文件内容实例

    一.用Python创建一个新文件,内容是从0到9的整数, 每个数字占一行: 代码如下: #python >>>f=open('f.txt','w') # r只读,w可写,a追加 &g ...

最新文章

  1. nginx中的502错误
  2. 将UTC日期时间转换为本地日期时间
  3. java 素数欧拉筛选_[C++]欧拉素数筛的理解与实现
  4. python 字符转义_2500字 字符串专题总结
  5. 父亲节重读朱自清先生的《背影》
  6. 新唐N76E003与ST公司STM8S003F3芯片对比 史上最全的没有之一
  7. 小旋风万能蜘蛛池 小霸王蜘蛛池快速收录源码
  8. CAD基础+常用快捷(四)
  9. 论文笔记SKEP: Sentiment Knowledge Enhanced Pre-training for Sentiment Analysis
  10. Linux使用详解(进阶篇)
  11. python flask安装教程_pycharm安装flask用什么命令
  12. 窄带高清赋能体育赛事,世界杯高清直播背后的技术变革
  13. CSS3之正方体旋转
  14. 金额按千分位划分、数字按千分位划分
  15. OJ求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值
  16. ios android 占有率,Android全球占有率28.4% 超iOS一倍
  17. libxml2 libxslt库编译
  18. android 股票曲线 动态,各种曲线图表。矩形 圆形,股票
  19. 佳明手表怎么设置用户定制显示
  20. 舆情智慧决策闭环管理

热门文章

  1. OpenStack Liberty 连接vCenter
  2. hbase-site.xml 和 hbase-default.xml
  3. 通过js判断不同终端类型,跳转到不同的页面
  4. 短小强悍的JavaScript异步调用库
  5. 模拟窗口效果 Jquery
  6. CouldNOTfindQt4 install qt4-dev-tools qt4-doc qt4-qtconfig qt4-demos qt4-designer
  7. 中兴通讯应用之星一键手机电子书解决方案
  8. 再查ReactOS项目
  9. 数智化转型人才“大考”,综合人才成为企业“基础设施”
  10. Mybatis Plus 2 升到 Mybatis Plus 3 时,实体继承的Model类的的相关问题...