Python面对对象编程——对象、类详解及实例

Python中类与对象的初认识

1.Python 面向对象

Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python的面向对象编程。

如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程。

接下来我们先来简单的了解下面向对象的一些基本特征。


2.面向对象技术简介

  • 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
  • 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
  • 数据成员:类变量或者实例变量, 用于处理类及其实例对象的相关的数据。
  • 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
  • 局部变量:定义在方法中的变量,只作用于当前实例的类。
  • 实例变量:在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的。
  • 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
  • 实例化:创建一个类的实例,类的具体对象。
  • 方法:类中定义的函数。
  • 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

3.类的声明

Python面对对象编程——对象、类详解及实例

1)类的关键字:

从第一天第一个项目起我们就接触过关键字,这是语言中内定的一个语法规则吧,通过关键字告诉电脑下面一个字母或一段代码是什么,要用来干什么,告诉电脑怎么以哪种规则去用。

而class就是类的关键字,告诉系统我要定义一个类了。让系统用理解类的规则来理解我下面的一些代码。没有关键字来声明一下,系统就不知道下面的代码是什么。

2)标识符语法:

<1>合法的标识符,由字母数字下划线组成,其中数字不能开头。python2是ASCII码,python3是UTF-8编码表。python3编码方式是Unicode(万国码),支持中文,utf-8,utf-16,兼容ACSII;python2ASCII,不支持中文。

<2>大小写敏感(区分大小写)

<3>没有长度限制

<4>不能使用关键字、保留字

开发习惯:

1望文生义,如:age=13,num=12;外行写法:asdasda=13,haha=12
2.大小写:<1>包名全小写,<2>常量全大写,<3>变量、函数名小驼峰,开头首字母小写,后面首字母全大写,<4>类名大驼峰,首字母全大写。
3.其他命名:hello_world

3)要继承的类名:

这是一个更大的类,就是自己定义的类是其子类,可以从这个父类中继承一些功能与特性,现在使用默认的是object。父类和子类的关系应该像一个学校与这个学校中的一个班级的关系,自定义类就是新开一个班,班不是随便开的,是在学校这个环境下开的。不然开了没有学校的帮助这个班可能毫无用处。新开的班名就是类的标识符。

Object是一个超类,t就像是一个所有类的天道规则吧!。不管是吃饭睡觉打豆豆还是开班传教。总之这一切是在这个世界上完成的。在这个世界的运转规则下完成的。


4.类中对象初始化

Python面对对象编程——对象、类详解及实例

1)关键字

python中一共含有32个关键字:

‘false’, ‘none’, ‘true’, ‘and’, ‘as’, ‘assert’, ‘break’, ‘class’, ‘continue’, ‘def’, ‘del’, ‘elif’, ‘else’, ‘except’, ‘finally’, ‘for’, ‘from’, ‘global’, ‘if’, ‘import’, ‘in’, ‘is’, ‘lambda’, ‘nonlocal’, ‘not’, ‘or’, ‘pass’, ‘raise’, ‘return’, ‘try’, ‘while’, ‘with’, ‘yield’

关键字-是Python内置的、具有特殊意义的表示符
使用时关键字后面不需要括号

因为这里的__int__是一个内置函数,因此它以关键字def开头

2) __int__函数与参数:

前面有说到一个超类 object ,init()就是这个超类中诞生的一个用于初始化对象数据的一个函数,就相当于 object这个天道下诞生的一个具有初始化能力的神,init()函数的参数是定义了这个类所具有的一些特性。举个栗子来说:

Long long ago,天道(object)诞生了,后来女娲(init函数)也诞生了。她有一项能力就是捏土造人。人是一种什么存在呢?女娲在脑海中对人进行了想像,人有这么些特征(属性):五官,四肢,分男女等等。总之,这个神(init)给你设置了一些属性,那么不管你怎么变化都是在这些属性之内,她说你是卵生,你就不会是从蛋里出来。否则你就是跑错片场了,不属于这个类,不是这个类中的对象。

3)初始化数据:

在这个类中Init函数已经赋予了对象一些属性,比如说学生这个类,学生中的某个对象是具有名字,性别,身高,体重这些属性的。(其他的属性美丑之类的未定义不考虑)但是名字是什么?性别是什么?这需要初始化一下数据!

回到神话中,女娲要造的“人”,包含五官,四肢,分男女等属性,但是如果她把这些和别的大神们说,别的大神还是不知道“人”是什么,因为五官是什么,四肢是什么其他大神还是不知道(由此可见五官,四肢等其实和“人”也一样是中对象),这个时候女娲就要做出赋值行为,现场做出五官,四肢实体然后组成一个人,这个时候其他大神就明白了,即使见到一个比较胖的人也还能认出这东西是女娲造的人。

5.类的使用:

Python面对对象编程——对象、类详解及实例

1) 类的方法

穿上类的马甲叫方法,脱了马甲叫函数。
在类里面设置的函数,进行一些关于类中对象的处理的步骤方法。

2)类属性值的引用

类不是觉得无聊随便设立的一个东西,而是为了对一些具有相同属性特征的对象进行统一处理的一个模块。那么人们既然建立了类这种东西来处理一些问题,那么也必然会想要从中得到处理的一些数据。这时便进行了类属性值的引用,因为既然是一个类,那么某些角度上来看,其中的所有对象都是一样的。只有再深入一点,去看每个对象的属性值才可以区分每一个对象,所以我们可以这样获取数据:stu.name ,先写出是哪个对象然后在点一下深入到某个属性中,如果只有对象名,那这个对象这么多属性系统怎么知道你要哪一个,索性给你这个对象属性存放的地址你自己找去吧!如果只有属性没有对象名,那你这个要求就是太无理了,系统会直接给你个错误提示就不再搭理你了!

3)类方法的引用

如果说类只能够帮助人们整理数据然后让人们来引用的话,那还不如直接建立一个字典。

所有类有一个叫方法的功能,你可能要获取某种结果是需要对类中对象进行某种处理,那我就直接把方法写出来。这样你想要对哪个对象进行什么处理,那你直接告诉方法这个东西,方法会直接给你个结果。这样看,类中的方法是不是一个很好用很合格的助手呢。

6.实例

实例1:

#面向对象
#需要有意义的面向对象的代码,不是有了类就是面向对象
#核心:类 对象
#实例化
#方法:设计层面   函数:程序运形,过程式一种称谓


class Student():
    name = 'redhat'      					 		##变量:数据成员
    age = 12

    def print_file(self):					#类的方法
        print('name:' + self.name)
        print('age:' + str(self.age))

student = Student()							#实例化
student.print_file()						#类方法的引用

Python面对对象编程——对象、类详解及实例

实例2:

#对象:对象是现实世界或者思维世界中的实体在计算机中的反映,
#它将数据以及这些数据上的操作封装在一起

#类:一类事物的统称,对象是类具体化的产物,也就是实例化

#不同的对象有什么不同特点:比如年龄,姓名

class Student():
    name = ''
    age = 0

    def __init__(self,name,age):
        #构造函数
        self.name = name
        self.age = age

    def do_homework(self):
        print('homework')

student1 = Student('redhat',38)
print(student1.name)
print(student1.age)

Python面对对象编程——对象、类详解及实例

实例3:

class Dog():

    def __init__(self,name):
        self.name = name

    def __str__(self):
        #必须返回一个字符串
        return '这是 %s' %(self.name)

Gofei = Dog('旺财')
print(Gofei)

Python面对对象编程——对象、类详解及实例