Python类和对象基础入门介绍

目录
  • 视频
  • Python 类和对象
    • 创建和使用类
    • 根据类创建实例

视频

观看视频

Python 类和对象

面向对象编程是编写表示现实世界中的事物和情景的类,并基于这些类来创建对象。

编写类时,你定义一大类对象都有的通用行为。基于类创建对象时,每个对象都自动具备这种通用行为,然后可根据需要赋予每个对象独特的个性。使用面向对象编程可模拟现实情景,其逼真程度达到了令你惊讶的地步。

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

面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Dog类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。

创建和使用类

Python定义类是通过class关键字:

class Dog(object): # 若不提供object,默认的也是object
    pass

class后面跟着类名,即Dog,类名通常首字母大写,(object)表示该类是从哪个类继承下来的,如果没有合适的继承类,就使用object类,这是所有类最终都会继承的类。

可以创建Dog类的实例,创建实例是通过类名+()实现的:

>>> bart = Dog()
>>> bart
<__main__.Dog object at 0x10a67a590>
>>> Dog
<class '__main__.Dog'>

变量bart指向的是一个Dog的实例,后面的0x10a67a590是内存地址,每个object的地址都不一样,Dog是一个类。

假设Dog类创建的每个实例都将存储名字和年龄。赋予每条小狗蹲下sit()和打滚roll_over()的能力:

dog.py

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!") 

第1行:定义了一个名为Dog的类。根据约定,在Python中,首字母大写的名称指的是类。这个类定义中的括号是空的,因为要从空白创建这个类。

第2行:编写了一个文档字符串,对这个类的功能作了描述。

方法__init__()

类中的函数称为方法;有关函数的一切都适用于方法,就目前而言,唯一重要的差别是调用方法的方式。

第3行:方法__init__()是一个特殊的方法,每当你根据Dog类创建新实例时,Python都会自动运行它。在这个方法的名称中,开头和末尾各有两个下划线,这是一种约定,旨在避免Python默认方法与普通方法发生名称冲突。

将方法__init__()定义成了包含三个形参:self、name和age。在这个方法的定义中,形参self必不可少,还必须位于其他形参的前面。为何必须在方法定义中包含形参self呢?因为,Python调用这个__init__()方法来创建Dog实例时,将自动传入实参self。每个与类相关联的方法调用都自动传递实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。

创建Dog实例时,Python将调用Dog类的方法__init__()。将通过实参向Dog()传递名字和年龄;self会自动传递,因此不需要传递它。每当根据Dog类创建实例时,都只需给最后两个形参(name和age)提供值。

第5、6行:定义的两个变量都有前缀self。以self为前缀的变量都可供类中的所有方法使用,还可以通过类的任何实例来访问这些变量。self.name = name获取存储在形参name中的值,并将其存储到变量name中,然后该变量被关联到当前创建的实例。self.age = age的作用与此类似。

像这样可通过实例访问的变量称为属性。

Dog类还定义了另外两个方法:sit()和roll_over()。由于这些方法不需要额外的信息,如名字或年龄,因此它们只有一个形参self。后面将创建的实例能够访问这些方法,换句话说,它们都会蹲下和打滚。

根据类创建实例

可将类视为有关如何创建实例的说明。Dog类是一系列说明,让Python知道如何创建表示特定小狗的实例。

下面来创建一个表示特定小狗的实例:

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.") 

第1行:让Python创建一条名字为’willie’、年龄为6的小狗。遇到这行代码时,Python使用实参’willie’和6调用Dog类中的方法__init__()

方法__init__()创建一个表示特定小狗的示例,并使用提供的值来设置属性name和age。方法__init__()并未显式地包含return语句,但Python自动返回一个表示这条小狗的实例。将这

个实例存储在变量my_dog中。在这里,命名约定很有用:通常可以认为首字母大写的名称指的是类,而小写的名称指的是根据类创建的实例。

访问属性

要访问实例的属性,可使用句点表示法。

第2行:编写了如下代码来访问my_dog的属性name的值:

my_dog.name

句点表示法在Python中很常用,这种语法演示了Python如何获悉属性的值。在这里,Python先找到实例my_dog,再查找与这个实例相关联的属性name。在Dog类中引用这个属性时,使用的是self.name。在前面的第1条print语句中,my_dog.name.title()将my_dog的属性name的值’willie’改为首字母大写的;在第2条print语句中,str(my_dog.age)将my_dog的属性age的值6转换为字符串。

输出是有关my_dog的摘要:

My dog’s name is Willie.

My dog is 6 years old.

调用方法

根据Dog类创建实例后,就可以使用句点表示法来调用Dog类中定义的任何方法。下面来让小狗蹲下和打滚:

my_dog = Dog('willie', 6)
my_dog.sit()
my_dog.roll_over()

要调用方法,可指定实例的名称和要调用的方法,并用句点分隔它们。遇到代码my_dog.sit()时,Python在类Dog中查找方法sit()并运行其代码。

Willie按的命令做了:

Willie is now sitting.

Willie rolled over!

这种语法很有用。如果给属性和方法指定了合适的描述性名称,如name、age、sit()和roll_over(),即便是从未见过的代码块,也能够轻松地推断出它是做什么的。

创建多个实例

可按需求根据类创建任意数量的实例。下面再创建一个名为your_dog的实例:

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("\nYour dog's name is " + your_dog.name.title() + ".")
print("Your dog is " + str(your_dog.age) + " years old.")
your_dog.sit() 

在这个实例中,创建了两条小狗,它们分别名为Willie和Lucy。每条小狗都是一个独立

的实例,有自己的一组属性,能够执行相同的操作:

My dog’s name is Willie.

My dog is 6 years old.

Willie is now sitting.

Your dog’s name is Lucy.

Your dog is 3 years old.

Lucy is now sitting.

就算给第二条小狗指定同样的名字和年龄,Python依然会根据Dog类创建另一个实例。

你可按需求根据一个类创建任意数量的实例,条件是将每个实例都存储在不同的变量中,或占用列表或字典的不同位置。

到此这篇关于Python类和对象基础入门介绍的文章就介绍到这了,更多相关Python类与对象内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python面向对象之类和对象

    目录 类 定义类 定义类和属性 类中方法 对象方法(普通方法) 类方法 静态方法 魔术方法 对象 创建对象 对象属性 总结 类 定义类 所有类名首字母要求大写,多个单词时遵循驼峰命名法 所有未定义父类的类都继承object 格式:class 类名[(父类)]: #两种方式意思相同 class Person: pass class Person(object): pass 定义类和属性 name.age.subject就是类属性 class Student: #类属性 name = '' age

  • Python入门之面向对象和类

    目录 一.两大编程思想 二.类与对象 三.定义Python中的类 四.对象创建 五.类属性.类方法.静态方法 六.动态绑定属性和方法 七.面向对象的三大特征 八.方法重写 总结 一.两大编程思想 二.类与对象 简单举例: python中一切皆对象,开局一张图: 三.定义Python中的类 举例1: class Student: pass print(id(Student)) #1149225945800 print(type(Student)) #<class 'type'> print(St

  • python基础之定义类和对象详解

    定义简单的类 面向对象是更大的封装,在一个类中封装多个方法,这样通过这个类创建出来的对象,就可以直接调用这些方法了! 定义只包含方法的类 在python中,要定义一个只包含方法的类,语法格式如下: #用class定义类名 class 类名: def 方法1(self,参数列表) #方法的属性中有且仅有一个self pass def 方法2(self,参数列表) #类之外定义的def是函数,在类里面定义的def叫做方法,而且括号里必须要有self pass class Student: pass

  • Python编程基础之类和对象

    目录 零.本讲学习目标 一.面向对象 (一)程序员“面向对象” (二)两种编程思想实现五子棋 (三)面向过程 vs. 面向对象 (四)面向对象三大特点 1.封装(encapsulation) 2.继承(inheritance) 3.多态(polymorphism) 二.类和对象 (一)类和对象的关系 1.概述 2.示意图 (二)类的定义 1.类的构成 2.类定义语法格式 3.案例演示 (三)创建对象 1.语法格式 2.给对象添加属性 3.案例演示 三.Python中的对象 (一)概述 (二)常用

  • Python面向对象之入门类和对象

    目录 什么是面向对象编程? 定义类,从具体代码来感受吧! 多个类和对象的观察 补充一下类的属性(数据部分) 总结 什么是面向对象编程? 我们是不是听过面向过程,拿来放在一起对比就比较好理解了. 简单来理解,面向过程就是一切用函数解决一切文件,简单粗暴! 面向对象是面向过程编程之后才出现了,没有面向对象编程很多程序还不是照样开发. 面向对象,也使用函数,但是多了一个网,这个网把一个或者多个函数,和数据关联在一起,然后称为一类事物,也就是程序中的'类'(class) 定义类,从具体代码来感受吧! 面

  • Python 类和对象详细介绍

    目录 对象 = 属性 + 方法 self是什么 公有和私有 继承 调用未绑定的父类方法 使用super函数 多重继承 组合 构造和析构 _ _init_ _(self[, …])构造方法 _ _new_ _(cls[, …])方法 _ _del_ _(self)析构方法 什么是绑定 对象 = 属性 + 方法 我们前面其实已经接触过封装的概念,把乱七八糟的数据扔进列表里面,这是一种封装,是数据层面的封装:把常用的代码段打包成一个函数,这也是一种封装,是语句层面的封装:现在我们要学习的对象,也是一种

  • Python类和对象的定义与实际应用案例分析

    本文实例讲述了Python类和对象的定义与实际应用.分享给大家供大家参考,具体如下: 1.DVD管理系统 # -*- coding:utf-8 -*- #! python3 class dvd: def __init__(self,name,price,state): self.name=name; self.price=price self.state=state def __str__(self): stat='已借出'; if self.state==1: stat='未借出' retur

  • 从C语言中读取Python 类文件对象

    问题 你要写C扩展来读取来自任何Python类文件对象中的数据(比如普通文件.StringIO对象等). 解决方案 要读取一个类文件对象的数据,你需要重复调用 read() 方法,然后正确的解码获得的数据. 下面是一个C扩展函数例子,仅仅只是读取一个类文件对象中的所有数据并将其输出到标准输出: #define CHUNK_SIZE 8192 /* Consume a "file-like" object and write bytes to stdout */ static PyObj

  • C++ 类和对象基础篇

    类是创建对象的模板,一个类可以创建多个对象,每个对象都是类类型的一个变量:创建对象的过程也叫类的实例化.每个对象都是类的一个具体实例(Instance),拥有类的成员变量和成员函数. 一.类的定义 一个简单的类的定义: class Student{ public: //成员变量 char *name; int age; float score; //成员函数 void say(){ cout<<name<<"的年龄是"<<age<<&qu

  • iis7.5 URL重写零基础入门介绍

    首先说的是IIS7.5,win7或者win2008都支持,然后要下载一个微软的组件:Url重写组件,这里发个64位的组件,如果你的系统是32位的可以网上找下,很多的. 64位URL重写组件:http://www.jb51.net/softs/479310.html 安装好后,打开你的IIS就会有如图所示的图标: 然后打开你要设置的网站,右侧就会有如图所示: 这里学习吧提供几种url重写方案: 1,URL域名规模化: 比如你想让你的的 xx.com一访问就访问到www.xx.com上,这样对用户和

  • 什么是python类属性

    首先我们来看一下属性的定义 属性的定义:python中的属性其实是普通方法的衍生. 操作类属性有三种方法: 1.使用@property装饰器操作类属性. 2.使用类或实例直接操作类属性(例如:obj.name,obj.age=18,del obj.age) 3.使用python内置函数操作属性. 属性存在的意义: 1.访问属性时可以制造出和访问字段完全相同的假象,属性由方法衍生而来,如果Python中没有属性,方法完全可以代替其功能. 2.定义属性可以动态获取某个属性值,属性值由属性对应的方式实

  • Python面向对象基础入门之设置对象属性

    前言 前面我们已经介绍了 python面向对象入门教程之从代码复用开始(一) ,这篇文章主要介绍的是关于Python面向对象之设置对象属性的相关内容,下面话不多说了,来一起看看详细的介绍吧 用类存储数据 类实际上就是一个数据结构,对于python而言,它是一个类似于字典的结构.当根据类创建了对象之后,这个对象就有了一个数据结构,包含一些赋值了的属性.在这一点上,它和其它语言的struct的作用是类似的:存储数据并提供数据检索功能. 例如,下面是史上最简单的类: class Person: pas

  • Python面向对象思想与应用入门教程【类与对象】

    本文实例讲述了Python面向对象思想与应用.分享给大家供大家参考,具体如下: 面向对象思想 1.面向对象的设计思想 面向对象是基于万物皆对象这个哲学观点. 2.面向对象和面向过程的区别 面向过程 在生活中: 它是一种看待问题的思维方式,在思考问题的时候,着眼问题是怎样一步一步解决的,然后亲力亲为去解决问题[类似于公司里的执行者]. 在程序中: ​ 代码是从上而下顺序执行,各个模块之间的关系尽可能简单,在功能上相对独立,程序的流程在写程序的时候就已经决定. 面向对象 在生活中: 它是另一种看待问

  • Python类的继承、多态及获取对象信息操作详解

    本文实例讲述了Python类的继承.多态及获取对象信息操作.分享给大家供大家参考,具体如下: 继承 类的继承机制使得子类可以继承父类中定义的方法,拥有父类的财产,比如有一个Animal的类作为父类,它有一个eat方法: class Animal(object): def __init__(self): print("Animal 构造函数调用!") def eat(self): print("Animal is eatting!") 写两个子类,Cat和Dog类,继

  • Python面向对象基础入门之编码细节与注意事项

    前言 在前面,我用了3篇文章解释python的面向对象: 面向对象:从代码复用开始 面向对象:设置对象属性 类和对象的名称空间 本篇是第4篇,用一个完整的示例来解释面向对象的一些细节. 例子的模型是父类Employe和子类Manager,从类的定义开始,一步步完善直到类变得完整. 定义Person类 现在,假设Employe类有3个属性:名字name.职称job和月薪水pay. 定义这个类: class Employe(): def __init__(self, name, job=None,

  • 简述 Python 的类和对象

    系列最后一篇来说说Python中的类与对象,Python这门语言是无处不对象,如果你曾浅要了解过Python,你应该听过Python是一种面向对象编程的语言,所以你经常可能会看到面向"对象"编程这类段子,而面向对象编程的语言都会有三大特征:封装.继承.多态. 我们平时接触到的很多函数.方法的操作都具有这些性质,我们只是会用,但还没有去深入了解它的本质,下面就介绍一下关于类和对象的相关知识. 封装 封装这个概念应该并不陌生,比如我们把一些数据封装成一个列表,这就属于数据封装,我们也可以将

随机推荐

其他