面向对象编程
1.概念:
面向对象(object-oriented ;简称: OO) 至今还没有统一的概念 我这里把它定义为: 按人们 认识客观世界的系统思维方式,采用基于对象(实体) 的概念建立模型,模拟客观世界分析、设 计、实现软件的办法。
# **程序是由数据和功能组合而成的对象构建起来的**
# 面向对象编程(Object Oriented Programming-OOP) 是一种解决软件复用的设计和编程方法。
这种方法把软件系统中相近相似的操作逻辑和操作 应用数据、状态,以类的型式描述出来,
# 以对象实例的形式在软件系统中复用,以达到提高软件开发效率的作用。
2.详解
举个栗子:菜鸟买电脑
第一种方式:
1)在网上查找资料
2)根据自己预算和需求定电脑的型号 MacBook 15 顶配 1W8
3)去市场找到苹果店各种店无法甄别真假 随便找了一家
4)找到业务员,业务员推荐了另外一款 配置更高价格便宜,也是苹果系统的 1W
5)砍价30分钟 付款9999
6)成交
回去之后发现各种问题
第二种方式 :
1)找一个靠谱的电脑高手
2)给钱交易
以上第一种方式是面向过程强调的是步骤、过程、每一步都是自己亲自去实现的。第二种方式是面向对象。 强调的是电脑高手, 电脑高手是处理这件事的主角,对我们而言,我们并不必亲自实现整个步骤,只需要调用电脑高手就可以解决问题 这种解决问题的思路就 是面向对象
-
面向过程:根据业务逻辑从上到下写代码,
-
面向对象:对数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程
-
面向对象和面向过程都是解决问题的一种思路而已
- 当遇到一个需求的时候不用自己去实现,如果自己一步步实现那就是面向过程
- 应该找一个专门做这个事的人来做
- 面向对象是基于面向过程的
怎么将面对对象带入到编程中去?
类 — class
1.类基本概念及理解
# 类是对象的抽象化,类是一群具有相同特征或行为的事物的统称。
2.类的定义:
class 类名():
pass
# 1.命名规则:驼峰命名法(首字母大写)
class Person():
pass
# 2.调用:类的实例化
class Person():
pass
wum = Person() # wum是Person类的一个实例
mar = Person() # 同理
3.类的属性
类可以看作是独立存放(属性及方法)的空间。
类就像人拥有其独特的特性(属性)以及行动(方法)
实例对象可以获得类中所有的属性及方法
class Person():
varl = '我会说人类语言,还有帅气的五官'
Person.vars = '手脚'
wum = Person()
print(wum.varl) # 调用属性
wum.vars2 = '手脚'
print(wum.vars)
print(wum.vars2)
# 在查找属性时,会优先在实例中查找,然后在类中查找
4.类与实例之间的联系
# 1.类时一个事物的抽像,不是真实存在的,描绘了事物的共性
# 2.实例:某个事物的具体个体,是该类事物的具体表现,真实存在
实例也是存放变量的空间,不同实例之间互不可见
class Person():
varl = '大脑'
wum = Person()
mor = Person()
wum.age = 18
print(wum.age)
print(mor.age)
print(Person.age)
# 实例的特征方为属性
5.私有属性
1.概念:
1.属性前加'_'一个下划线,外部可以直接访问
1.属性前加'__'两个下划线,外部不可以直接访问
# 这是一种规范,并非限制
# 定义在类中的私有属性也可以被子类继承
2.深入理解
class Person():
_age = 18
__sex = '男'
wum = Person()
print(dir(wum)) # 不能直接访问需要查看其在类中的名字形式
print(wum._age)
print(wum.__sex)
3.属性的修改与保护
_ 和 __这是一种规范(约定), 没有真正的限制作用
# 修改
# - 对象名.属性名 = 数据 ---->直接修改
# - 对象名.方法名() ---->间接修改
# 为了更好的保存属性安全,即不能随意修改,一般的处理方式为
# - 将属性定义为私有属性
# - 添加一个可以调用的方法,供调用
class People(object):
def __init__(self, name):
self.__name = name
def getName(self):
return self.__name
def setName(self, newName):
if len(newName) >= 5:
self.__name = newName
else:
print("error:名字长度需要大于或者等于5")
xiaoming = People("dongGe")
print(xiaoming.__name) # 无法直接调用
print(xiaoming.getName())
6.方法
- 类属性就是针对 类对象定义的属性
- 使用 赋值语句 在
class
关键字下方可以定义 类属性 - 类属性 用于记录 与这个类相关 的特征
- 使用 赋值语句 在
- 类方法就是针对 类对象定义的方法
- 在 类方法 内部可以直接访问 类属性 或者调用其他的 类方法
# self代表实例本身
class Person():
def eat(self):
print('吃')
wum = Person()
wum.eat() # 调用方法
# 实例方法代表实例的行为
# 与函数传参一样,只会先传一个自身的实例self
class Person():
def eat(self):
print(f'吃---{self.name}')
wum = Person()
wum.name = '张三'
wum.eat() # 调用方法
'实例方法'的调用过程与self:
1.通常将默认会传入的那个参数命名为self
# 用来表示调用这个方法的实例对象本身
2.方法总是定义在类中,但是却叫实例方法,因为它表示该类所有实例共有的行为