python定义一个dog类 类属性有名字_Python中关于类

Python中关于类

面向对象编程时最有效的软件编写方式之一。在面向对象编程中,我们模拟现实世界,编写现实世界中的事物和情景,并基于这些类创建实例。

我们现实生活中的任何东西都可以称为一个类,例如:狗是一个类,电脑是一个类,水果是一个类。每个类都有一些共性的东西,称为属性和行为。比如说狗这个类,狗有名字,有颜色,那么名字和颜色就是狗这个类的属性;狗可以吃,可以睡,可以叫,那么吃,睡,叫就是狗这个类的行为。

对象是类的实例,类是对象的抽象。举个例子,我养了一条狗叫Tom,那么Tom就是狗这个类的实例,是实际存在的;而狗就是Tom的抽象。对象包含了类中的所有属性和行为。

1.创建和使用类

类可以用来模拟所有东西。比如说,我们现在要创建一个Dog类,其中包含了名字,颜色的属性,包含了吃饭,睡觉,叫这三个行为(即方法)。

1.1 创建Dog类

在定义一个类的时候我们要注意一些规范:一般我们定义类名要用大写字母开头,在类中一般要包含一个文档字符串来对这个类进行描述。

如图所示,我们定义了一个狗的类。

init()方法是Python中类的一个特殊方法,是一个默认方法,每当我们创建一个狗的实例的时候就会调用这个函数,用来初始化这个对象。在这个方法的名称两边有两条下划线,这是为了区别别的方法,防止和其他方法同名。

方法__init__()中有三个参数,其中self参数必不可少,并且必须位于所有参数的第一个。

在Python调用这个__init__()方法的时候会自动传入实参self。每个与类相关的方法调用都自动传递实参self,他是一个指向实例本类的引用,让实例能够访问类中的属性和方法。

我们创建Dog类实例的时候,Python会自动调用__init__()函数,我们只需要传入name和color参数,self参数会自动传入。

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

1.2 根据类创建实例

我们在创建一个类时,会自动调用__init__方法,该方法会自动返回一个Dog类对象,我们用my_dog接受这个对象。

我们可以用句点访问法直接访问对象中的属性和方法。

2.使用类和实例

2.1 Dog类

我们添加了一个describe方法用于描述对象的信息。

2.2 给属性指定默认值

对象中的每个属性都必须要有初始值,当我们在定义一个类的时候,也可以给一些属性设置默认值,和函数参数默认值一样,我们在给类中属性设置默认值的时候必须把有默认值的属性放在__init__()参数列表的后面。

当我们将类中的一些属性设置了默认值后,我们在实例化对象的时候就可以省略那个参数的赋值,直接使用默认值。

我们将刚才狗这个类的属性color初始值设为’white’:

我们分别定义了两个对象,一个使用了默认值一个没使用默认值。然后用类中方法descibe查看效果。

2.3 修改属性的值

(1)直接修改属性的值

我们可以直接同过对象名和句点访问法修改属性的值。

我们增加了一个age属性,方便修改它的值。

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

我们可以在类中写一个方法用于修改属性的值,修改的值由该方法参数传入。

(3)通过方法对属性的值进行递增

我们可以在类中定义一个方法,对属性的值进行递增。

3.继承

继承是面向对象编程的一个重要功能,继承的意思是我们将一个类继承自另一个类,新的类能够获得被继承类的属性和方法,并且还能定义直接的新的属性和方法。新的类称为子类,被继承的类称为父类。

举个例子,我们刚才定义了一个Dog类,现在我们定义一个新类叫Huskey(哈士奇),继承Dog类,则Dog类所有的属性和方法Huskey类都自动获得,并且可以定义Huskey类自己的新方法。

3.1 子类的方法__init__()

我们在创建子类的时候,需要对继承的父类进行初始化。也就是说我们需要在子类的__init__()方法中调用父类的__init__()对父类进行初始化。这时我们就需要用到super()函数,它将父类和子类联系起来,使用这个函数我们可以在子类中调用父类的__init__()方法。

3.2 给子类添加属性和方法

我们可以在子类中添加一些新的方法。

3.3 重写父类方法

当我们继承了一个类之后,我们可以在子类中重写父类的方法,此时,重写的方法在子类中会覆盖父类的原方法,用子类对象调用的会是覆盖后的方法。

假如,我们要再刚才哈士奇类中的descibe方法中添加一句话,就需要对这个函数进行重写。

3.4 将实例用作属性

一个类的属性可以是另一个类,举个例子:电动车这是个类,其中可以包含电池这个类,因此电池这个类的实例就可以作为电动车这个类的一个属性。与继承不同,我们可以把它称为组合。在一个类中使用另一个类。

4.导入类

我们可以在程序中导入模块,同样的,我们可以向程序中导入类。

4.1 导入单个类

格式如下:

from 模块名 import 类名

使用这种方法,我们可以直接在程序中使用该类。

4.2 在一个模块中存储多个类

有时候我们在一个模块中不止存储一个类,我们可以把相似的类放在一个模块中,比如说我们可以把电动车,自行车等等放入同一个模块中。

4.3 从一个模块中导入多个类

从4.2我们知道了可以在一个模块中存储多个类,因此我们也可以在一个模块中导入多个类。

格式如下:

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

4.4 导入整个模块

我们还可以将整个模块导入,然后使用句点访问方式(模块名.类名)使用模块中的类。

格式如下:

import 模块名

4.5 导入模块中的所有类

我们也可以将模块中的所有类导入。

格式如下:

from 模块名 import *

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

当我们发现要在一个模块中使用到另一个模块的类,或者说两个模块间有关联时,我们就可以在这个模块中导入另一个模块。

导入方法与前面无异。

5.Python标准库

Python提供了许多已经写好的模块,我们在安装Python的时候都包含了它们。我们在编写程序的时候可以直接导入这些模块,使用其中已经编写好的函数和类。

类编码风格

我们在编写类的时候有一些要注意的格式建议:

1.类名使用驼峰命名法,将类名中的每个单词的首字母大写,不使用下划线。实例名称和模块名采用小写,并在单词间加入下划线。

2.我们在编写类的时候,需要在类定义后面写一个文档字符串,用于说明该类的功能。

3.在类中用空行对方法进行分隔;用两个空行对类进行分隔。

4.当我们既要导入标准库中的模块又要导入我们直接编写的模块时,我们需要把导入标准库的语句写在前面,导入我们直接写的语句放在后面。

参考书目:Python编程从入门到实践

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值