编程学习网 > 编程语言 > Python > python教程class类(Python入门类Class)
2023
05-31

python教程class类(Python入门类Class)

一、面向对象简介

Python从设计就是门面向对象的语言,创建一个类和对象是非常容易的。
面向对象编程是一种程序设计的范式;
它把程序看做不同的对象相互调用;
它是一种对具体事务的抽象模型。
面向对象编程最基本特征是类和实例。
类是用于定义抽象的对象模型,实例是根据类创建的对象。
面向对象编程基本的名词解释如下:(重点在类、实例、方法,其他看着头大,学着学着就会知道,不要钻牛角尖)
类(Class): 用于定义抽象的对象模型,它是描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。
类属性(类变量):类属性在整个实例化的对象中是公用的。类属性定义在类中且在函数体方法之外。类属性通常不作为实例变量使用。
方法:类中定义的函数。
实例属性(实例变量):只做用于当前实例的变量属性。
方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
实例化:创建一个类的实例,类的具体对象。
实例:根据类定义的抽象模型创建出来的具体对象。
数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。
如:
类:我们根据共有特征定义一个类(抽象对象模型) <人>类的相同属性有姓名<name>、性别<sex>、年龄<age>。
实例:我们根据<人>类可以创建不同的人,如【小明】、【小红】、【小花】等具有自己相应特征的人;【小明】、【小红】、【小花】就是实例。
class person(object):
   address = '中国'  # 类属性,没个实例的公共属性
   def __init__(self, name, sex, age):  # 相当于java中的构造方法
       self.name = name  # 实例属性
       self.sex = sex  # 实例属性
       self.age = age  # 实例属性
   def dance(self):  # 方法
       print(self.name, '跳了一场舞')
hong = person('小红', '女', 18)  # 实例化小红,将实例化的对象赋值给变量hong
ming = person('小明', '男', 26)
hua = person('小花', '女', 22)
二、Class创建
1、Python类的定义与实例的创建
在Python中,类通过 class 关键字定义,类名通用习惯为首字母大写,Python3中类基本都会继承于object类,语法格式如下,我们创建一个Name类:
class Name(object):  # 创建name类,name为类名
   pass  # 此处可添加属性和方法
注意:我们定义的类都会继承于object类,当然也可以不继承object类;两者区别不大,但没有继承于object类使用多继承时可能会出现问题。
有了Name类的定义,就可以创建出具体的Name1、Name2等实例,Name1和Name2是个实际的。创建实例使用 类名+(),类似函数调用的形式创建。
如下我们创建两个Circle类的实例:
Name1= Name()
Name2= Nmae()
2、Python类中的实例属性与类属性
类的属性是用来表明这个类是什么的。
类的属性分为实例属性与类属性两种。
实例属性用于区分不同的实例;
类属性是每个实例的共有属性。
区别:实例属性每个实例都各自拥有,相互独立;而类属性有且只有一份,是共有的属性。
2.1、实例属性
类的属性都是用来指明这个类"是什么",实例属性是用来区分每个实例不同的基础。
在上面我们创建了Name类,大家都知道所有圆都具备半径这个通用属性,下面我们为Name1、Name2实例添加 r 这个属性并赋值。
Name1.r=1# r为实例属性
Name2.R=2  
print(Name.r)  # 使用 实例名.属性名 可以访问我们的属性
print(Name2.R)
如上 Name1.r、Name2.R 大小写有区分,两个实例的属性名称不统一不利于后面的访问和使用,而且每次在创建圆后我们要再为实例添加属性会比较麻烦,所以我们可以在创建实例时给类初始属性。
在定义 Name类时,可以为 Name类添加一个特殊的 __init__() 方法,当创建实例时,__init__() 方法被自动调用为创建的实例增加实例属性。
我们在此为每个实例都统一加上我们需要的属性(用法类似java的构造方法):
class Name(object):  # 创建Name类
   def __init__(self, r): # 初始化一个属性r(不要忘记self参数,他是类下面所有方法必须的参数)
       self.r = r  # 表示给我们将要创建的实例赋予属性r赋值
注意:__init__() 方法的第一个参数必须是 self(self代表类的实例,可以用别的名字,但建议使用约定成俗的self),后续参数则可以自由指定,和定义函数没有任何区别。
面试喜欢问的问题:创建类时,类方法中的self是什么?
self 代表类的实例,是通过类创建的实例 (注意,在定义类时这个实例我们还没有创建,它表示的我们使用类时创建的那个实例)
2.2、类属性
绑定在实例上的属性不会影响其他实例,但类本身也是一个对象,如果在类上绑定属性,则所有实例都可以访问该类的属性,并且所有实例访问的类属性都是同一个!!!记住,实例属性每个实例各自拥有,互相独立,而类属性有且只有一份。
圆周率π为圆的共有属性,我们可以在Circle类添加pi这个类属性,如下:
class Circle(object):
   pi = 3.14  # 类属性
   def __init__(self, r):
       self.r = r
circle1 = Circle(1)
circle2 = Circle(2)
print('pi=\t', Circle.pi)
print('circle1.pi=\t', circle1.pi)  #  3.14
print('circle2.pi=\t', circle2.pi)  #  3.14
输出结果:
pi=  3.14
circle1.pi=  3.14
circle2.pi=  3.14
3、Python类的实例方法
方法是表明这个类用是来做什么。
在类的内部,使用 def 关键字来定义方法,与一般函数定义不同,类方法必须第一个参数为 self, self 代表的是类的实例(即你还未创建类的实例),其他参数和普通函数是完全一样。
如下我们给圆类 Circle 添加求面积的方法 get_area :
class Circle(object):
   pi = 3.14  # 类属性
   def __init__(self, r):
       self.r = r  # 实例属性
   def get_area(self):
       """ 圆的面积 """
       # return self.r**2 * Circle.pi # 通过实例修改pi的值对面积无影响,这个pi为类属性的值
       return self.r**2 * self.pi  # 通过实例修改pi的值对面积我们圆的面积就会改变
circle1 = Circle(1)
print(circle1.get_area())  # 调用方法 self不需要传入参数,不要忘记方法后的括号  输出 3.14
注意:示例中的 get_area(self) 就是一个方法,它的第一个参数是 self 。__init__(self, name)其实也可看做是一个特殊的实例方法。
在方法的内部需要调用实例属性采用 "self.属性名 " 调用。示例中 get_area(self) 对于 pi 属性的引用 Circle.pi 与 self.pi 存在一定区别。
Circle.pi 使用的是类属性 pi,我们通过创建的实例去修改 pi 的值对它无影响。self.pi 为实例的 pi 值,我们通过创建的实例去修改 pi 的值时,由于使用 self.pi 调用的是实例属性,所以 self.pi 是修改后的值。

调用实例的方法中使用实例属性可采用 实例名.方法名(除self的参数) 使用。

以上就是python教程class类(Python入门类Class)的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取