一、面向对象(OOP)基本概念
面向对象编程 —— Object Oriented Programming
简写 OOP
1.1 过程和函数
1.2 面相过程和面相对象基本概念
(1)面相过程 —— 怎么做?
特点
(2) 面向对象 —— 谁来做?
相比较函数,面向对象是更大的封装,根据职责在一个对象中封装多个方法
特点
二、类和对象
01. 类和对象的概念
1.1 类
1.2 对象
在程序开发中,应该先有类,再有对象
02. 类和对象的关系
03. 类的设计
在使用面相对象开发前,应该首先分析需求,确定一下,程序中需要包含哪些类!
在程序开发中,要设计一个类,通常需要满足一下三个要素:
大驼峰命名法
3.1 类名的确定
名词提炼法分析整个业务流程,出现的名词,通常就是找到的类
3.2 属性和方法的确定
实例:
三、面相对象基础语法
01. dir
内置函数
在Python中对象几乎是无所不在的,我们之前学习的变量、数据、函数都是对象;
使用内置函数 dir传入标识符 / 数据,可以查看对象内的所有属性及方法;
提示: __方法名__ 格式的方法是 Python 提供的 内置方法 / 属性
序号 | 方法名 | 类型 | 作用 |
---|---|---|---|
01 | __new__ | 方法 | 创建对象时,会被 自动 调用 |
02 | __init__ | 方法 | 对象被初始化时,会被 自动 调用 |
03 | __del__ | 方法 | 对象被从内存中销毁前,会被 自动 调用 |
04 | __str__ | 方法 | 返回对象的描述信息,print 函数输出使用 |
02. 定义简单的类(只包含方法)
面向对象是更大的封装,在一个类中封装多个方法,这样通过这个类创建出来的对象,就可以直接调用这些方法了!
2.1 定义只包含方法的类
class 类名:
def 方法1(self, 参数列表):
pass
def 方法2(self, 参数列表):
pass
注意:类名的命名规则 要符合大驼峰命名法
2.2 创建对象
对象变量 = 类名()
2.3 第一个面向对象程序
class Dog:
"""这是一个狗类"""
def eat(self):
print("eat....")
def run(self):
print("run....")
dog = Dog()
dog.eat()
dog.run()
引用的概念
在Python中使用类创建对象之后,dog变量中仍然记录的是对象在内存中的地址
也就是dog变量引用了新建的狗对象
使用print输出对象变量,默认情况下,是能够输出这个变量引用的对象是由哪一个类创建的对象,以及在内存中的地址(十六进制表示)
提示:在计算机中,通常使用十六进制表示内存地址
%d
可以以 10 进制 输出数字
%x
可以以 16 进制 输出数字
03. 方法中的 self
参数
3.1给对象增加属性
在python中,要给对象设置属性,非常的容易,但是不推荐使用,因为:对象属性的封装应该封装在类的内部
只需要在类的外部的代码中直接通过 . 设置一个属性即可;
dog.name = "萨摩"
3.2 使用 self
在方法内部输出狗的名字
由哪一个对象调用的方法,方法内的 self 就是哪一个对象的引用。
self
参数
class Dog:
"""这是一个狗类"""
def eat(self):
print("%s 正在 eat.... " %self.name)
def run(self):
print("%s 正在 run.... " %self.name)
dog = Dog()
dog.name = "萨摩"
dog.eat()
dog.run()
04. 初始化方法
4.1 初始化方法
当使用类名()创建对象时,会 自动 执行以下操作:
这个 初始化方法 就是__init__方法,__init__是对象的内置方法
__init__方法是 专门 用来定义一个类 具有哪些属性的方法!
4.2 在初始化方法内部定义属性
class Dog:
def __init__(self):
print("这是初始化方法")
# 定义用Dog类创建的狗对象都有一个name属性
self.name = "萨摩"
def eat(self):
print("%s正在吃"%self.name)
# 使用类名()创建对象的时候了,会自动调用初始化方法__init__
samo = Dog()
samo.eat()
4.3 改造初始化方法 —— 初始化的同时设置初始值
在开发中,如果希望在创建对象的同时,就设置对象的属性,可以对 __init__方法进行改造
class Dog:
def __init__(self,name):
print("这是初始化方法")
self.name = name
def eat(self):
print("%s正在吃" % self.name)
samo = Dog("萨摩")
samo.eat()
05. 内置方法和属性
序号 | 方法名 | 类型 | 作用 |
---|---|---|---|
01 | __del__ | 方法 | 对象被从内存中销毁前,会被 自动 调用 |
02 | __str__ | 方法 | 返回对象的描述信息,print 函数输出使用 |
5.1 __del__
方法
class Dog:
def __init__(self,name):
self.name = name
print("%s 来了" % self.name)
def __del__(self):
print("%s 去了" % self.name)
samo = Dog("萨摩") # samo是一个全局变量
print(samo.name)
del samo # del关键字可以删除一个对象
5.2 __str__
方法
注意 __str__方法必须返回一个字符串
class Dog:
def __init__(self,name):
self.name = name
print("%s 来了" % self.name)
def __del__(self):
print("%s 去了" % self.name)
def __str__(self):
return "小狗%s" % self.name
samo = Dog("萨摩")
print(samo)
四、私有属性和私有方法
01. 应用场景及定义方式
1.1应用场景
1.2定义方式
class Person(object):
def __init__(self, name):
self.name = name
self.__age = '保密'
def __secret(self):
print('性别保密')
xiaohei = Person('xiaohei')
print(xiaohei.__age) # 私有属性外部不能访问
print(xiaohei.__secret()) # 私有方法外部不能访问
02. 伪私有属性和私有方法
提示:在日常开发中,不要使用这种方式,访问对象的私有属性或私有方法
python中,并没有 真正意义 的 私有
print(xiaohei._Person__age) # 私有属性外部不能访问
print(xiaohei._person__secret()) # 私有方法外部不能访问