类是程序世界描述客观世界的一种方法, 是面向对象编程的基础
面向对象
在之前的面向过程中, 变量、函数都是一些独立的过程代码, 之间没有特别的联系
比如如下一段代码
legs = 2
def walk():
print("直立行走")
从代码上看不出这段程序描述的意义, 但是实际上,这段代码希望描述人的特征, 但是legs与walk函数看不出来之间的关系
面向对象编程就不一样了, 它将一组变量与函数组织起来描述一个客观事物, 这就是对象思维
类的定义
类就是客观事物的类别, 比如: 人类, 兽类, 禽类.
在程序里通过对一组变量与函数的封装,来创建一个类别的模版, 这个模版包含了这类事物的特征属性与特有行为规则.
模版就称为类
, 在类内部的数据成员称为类的属性
, 内部的函数称为类的方法
###########################################################################
# 类的定义关键字是class #
#
类名,与定义函数一样需要函数名 #
# 冒号:不能少 #
# 类的属性,可以是一个变量,也可以是一个函数 #
# 函数在类内部称为类的方法 #
# #########################################################################
class ClassName:
property_1 = "属性"
def hello(self):
print("hello")
# 定义一个名为Person的类
# 类名建议使用驼峰法,并且首字母大写
class Person:
# 类属性,只要是正常人类的一员,都有这些相同的特征
legs = 2
feet = 2
head = 1
fur = 0
# 一个类可以包含任意多的变量与方法
# 方法的第一个参数(self),指的是对象实例自身,实际调用时,该参数不用显式传递
# 与函数一样,类的方法调用才会被执行,要调用walk这个方法,需要对类进行实例,然后由实例来调用类的方法
def walk(self):
print("walk by feet")
在上面这段代码中定义了一个Person
类,拥有四个变量 - legs
、feet
、head
、fur
,一个方法 - walk
,当然真正的人类有很多特征,但是我们往往只抽取必要的部分,至于什么是必要的,取决于你在解决什么问题。
类的实例
类代表了某一类具有相同属性的事物,但是具体到某一个事物的时候,属性值是不一样的,每一个事物都是类的一个实例。
获得一个类的实例,只要使用()
就可以完成实例化
# 与函数调用类似,类通过()完成实例化
# person就是Person的一个实例,可以用来调用类方法
person = Person()
# 通过实例来调用类方法
# 实例对象通过一个"."符号来调用,这个称为点语法
person.walk()
# 类本身不能直接调用方法
# 下面用法会报错
Person.walk()
# 可以通过点语法获取类属性
# 类名.类变量名
Person.legs
Person.feet
person.walk()
__init__
方法
我们对上面这个类并不是太满意,因为实例出来的person到底是谁不知道,男的女的也不知道,我们对类进行改造一下,加入初始化,在初始化的时候可以对实例的属性进行赋值。
给类添加初始化方法
class Person:
legs = 2
feet = 2
head = 1
fur = 0
# 加入了__init__方法
# 当类实例化的时候,会自动执行此方法
# self关键字指对象实例自身
# self.name, self.sex称为实例属性,属于每个实例
def __init__(self, name, sex, age):
self.name = name
self.sex = sex
self.age = age
def walk(self):
print(self.name, " walk by legs")
def hello(self):
print(f"my name is {self.name}, my age is {self.age}")
上面这段我们加入了__init__
方法,从名称上可以看出这是一个初始化的方法,当类进行实例的时候,首先执行这个__init__
方法, ,name,sex是初始化传入的参数,,他们是每个实例自有的属性,不是类的公共属性
带有初始化方法的person实例化
# 实例化一个名叫翠花的Person
# 当执行实例化的时候,“翠花”与“女”及18这几个实参传给了__init__
方法
cuihua = Person("翠花", "女", 18)
# 实例化一个名叫平哥的Person
pingge = Person("平哥", "男", 28)
# 通过实例化,就具体的创建了两个对象,代表两个人类个体
# 调用实例方法
cuihua.hello()
pingge.hello()
# 访问实例属性
# 注意区分类属性与实例属性
# 类属性为同一个类所有成员共有的属性
# 实例属性通过self点语法赋值与访问,绑定在具体的实例上,每个实例可以具有不同的属性
print(cuihua.sex)
print(cuihua.age)
print(pingge.sex)
print(pingge.age)
通过类,可以高度组织代码,并且将一组变量与方法封装起来,提高了代码的可维护性与程序的健壮性
类定义练习
只有通过多练习才能真正提高自己的编程能力,边看边练,必能成功
# 练习1: 定义商品类
# 定义一个类,描述商品,商品的变量属性有商品名称,商品型号,商品价格,生产日期
# 实例化的时候需要传入:商品名称、商品型号、商品价格、生产日期
# 需要定义实例方法:获得商品价格的方法、修改商品价格方法
# 练习2: 定义数据处理类
# 该类实例化的时候,可以传入任意数量的实参
# 提供一个方法:输出初始化实参中的所有数字类型的参数值
讨论区