面向对象编程(Object Orient Programming,简称 OOP),是一种编程方式,这种编程方式需要使用"对象"来实现。
对象具有以下特征:
1、世间万物皆对象
某个具体领域也是由对象组成,
例如:
在学校领域,对象包括 学生、教师、课程、成绩等
在银行领域,对象包括银行账户、工作人员、支票、现金和验钞机等
因此,问题领域中的概念和实体都可以被抽象为 对象。
2、每个对象都是唯一的
对象的唯一性来自于真实世界中事物的唯一性,
世界上不存在两片一模一样的叶子,因此在软件系统中对象也具有唯一性,
例如:学生小王、学生小李、小王的成绩单以及小李的成绩单,这些对象都是唯一的。
3、对象具有属性和行为
例如:小李,男,38岁,身高159,会唱歌、可单手开保时捷,
小李的属性是:姓名、性别、身高,行为是:唱歌、单手开保时捷
在比如:手机,品牌华为,价格5999,黑色,能够拍照、打电话以及看视频,
手机的属性包括品牌、价格和颜色,行为包括拍照、打电话和看视频,
对象的行为包括具有的功能及具体的实现。
4、对象具有状态
状态是指某个瞬间对象的各个属性的取值,
对象的某些行为往往会改变对象自身的状态,即属性的取值,
例如:小李体重200斤,经过减肥后,体重变为100斤
5、对象分为 类对象 和 实例对象 两大类
类对象 是具有相同属性和行为的实例对象的抽象,
类对象 就是实例对象的模板,实例对象是由类对象创建出来的。
例子:制作月饼,需要 月饼模具 以及 材料
月饼模具 就是 类对象(实例对象的模板)
月饼 就是 实例对象(由类对象创建出来),即 月饼 由 月饼模具 创建出来。
面向对象编程的大体步骤:
1、抽象出类对象
2、抽象出类对象属性
3、抽象出类对象的行为(方法)
4、根据类对象创建实例对象
5、通过实例对象访问属性的方法
定义类对象以及创建实例对象
一、定义类对象
定义类对象的语法格式:
class 类名(object):
属性和方法
1.类名由一个或多个单词组成,一般采取驼峰式写法,每个字母的首字母大写,其余的小写,例如: SomeClass
2.(object)表示该类对象继承来自Python内置的类对象object, Python中所有的类对象都继承自一个统一的
基类:object
class SomeClass(object):
pass
二、创建实例对象
根据类对象创建实例对象的语法格式:类名([实参])
为了在创建实例对象后对其进行初始化,可以在类对象中定义一个名为 __init__ (以双下划线开头和结尾)的特殊方法,
当创建实例对象后就会自动调用特殊方法 __init__。
方法就是定义在类对象中的函数,方法与函数的区别在于:
1、定义方法时,方法的第一个形参表示调用该方法的实例对象,第一形参的名称通常是 self ,也可以是其他名称;
2、调用方法时,系统自动将调用该方法的实例对象作为实参传递给第一形参,第一实参会传递给第二形参,
第二实参会传给第三形参,依此类推。
# 创建类对象
class SomeClass(object):
pass
# 创建实例对象,类名([实参])
sc = SomeClass()
print(sc)
# <__main__.SomeClass object at 0x000000000282FC48>
# 类对象 SomeClass 存在方十六进制的0x000000000282FC48 内存地址中
# 创建类对象
class SomePeople(object):
def __init__(self, age, sex):
self.age = age
self.sex = sex
# 创建实例对象,类名([实参])
test = SomePeople(18, "男")
print(test)
练习1
class Count():
# 定义加法
def add(self, a, b):
return a + b
# 定义减法
def acc(self, a, b):
return a - b
# 加法和减法相乘
def aee(self, a, b):
# 这里的 self 就是类本身的实例参数
return self.add(a, b) * self.acc(a, b)
if __name__ == '__main__':
# 实例化
t = Count()
# print(t.acc(3, 8))
print(t.aee(7, 8)) # -15
练习2
# 定义类
class ToastBeef():
def __init__(self):
# 被烤的时间
self.cook_time = 0
# 牛肉的初始状态,生的
self.cook_static = '生的'
# 调料列表,定义为空,代表开始的原味的
self.condiments = []
def cook(self, time):
"""烤牛肉的方法"""
self.cook_time += time
if 0 <= self.cook_time < 4:
self.cook_static = '三分熟'
elif 4 <= self.cook_time < 5:
self.cook_static = '五分熟'
elif 5 <= self.cook_time < 8:
self.cook_static = '7分熟'
elif self.cook_time >= 8:
self.cook_static = '熟透了'
def add_condiments(self, condiment):
"""添加调料"""
self.condiments.append(condiment)
def __str__(self):
# 当使用print输出对象的时候,默认打印对象的内存地址。如果类定义了__str__方法,
# 那么就会打印从在这个方法中 return 的数据。
return f'牛肉烤了{self.cook_time}分钟, 状态是{self.cook_static}, 添加的调料有{self.condiments}'
beef = ToastBeef()
# print(beef)
beef.cook(3)
beef.add_condiments('孜然')
print(beef)
# beef.cook(2)
# beef.add_condiments('胡椒粉')
# print(beef)