1、什么是面向对象编程?
---以前使用函数
---类+对象
2、什么是类什么是对象,又有什么关系?
class 类:
def 函数1():
pass
def 函数2():
pass
#obj 是对象,实例化的过程
obj = 类()
obj.函数1()
########## 面向对象不好 #########
########## 函数编程好 ###########
有时候,函数编程能实现,比较麻烦;
面向对象可以非常简短快速的实现;
3、什么时候适用面向对象?
---如果多个函数需要传入多个共同参数时,可将多个参数封装到面向对象
---根据一个模板创建某些东西的时候
---应用场景
#分别采用面向对象和函数的方法实现“连接服务器、上传文件和执行命令、关闭连接的功能”
class SSH:
def __init__(self,host,port,pwd,username):
self.host = host
...
def connection(self):
# 创建连接
self.conn = 和雾浮起创建的链接对象()
def close(self):
# 关闭
self.conn.关闭
def upload(self):
self.conn.使用链接上传文件
def cmd(self):
self.conn.使用链接执行命令
obj = SSH(...)
obj.connection()
obj.upload()
obj.cmd()
obj.close()
#-----------------函数式编程-------------------
def upload():
# 连接服务器
# 上传文件
# 关闭服务器
def cmd():
# 连接服务器
# 执行命令
# 关闭服务器
4、self就是调用当前方法的对象
---静态字段的适用场景,每个对象中保存相同的东西时,可以使用静态字段
class Foo:
#静态字段
#公有属性
country = "中国"
def __init__(self,name,count):
# 普通字段
# 普通属性
self.NAME = name
self.count = count
# self.country = "中国"
def bar(self):
pass
obj1 = Foo("河南",100000)
obj1.bar()
obj2 = Foo("山东",120000)
obj2.bar()
5、封装
----类中封装了:字段、方法;
----对象中封装了:普通字段(普通属性)的值;
#---------封装---------------
class F1:
def __init__(self,n):
self.N = n
print('F1')
class F2:
def __init__(self,arg1):
self.a = arg1
print('F2')
class F3:
def __init__(self,arg2):
self.b = arg2
print('F3')
o1 = F1("Alex")
o2 = F2(o1)
o3 = F3(o2)
###输出Alex###
#o3.b ==> o2
#o2.a ==> o1
o3.b.a.N
继承
###-------继承######
class F1:
def __init__(self):
print('F1')
def a1(self):
print('F1a1')
def a2(self):
print('F1a2')
class F2(F1):
def __init__(self):
print('F2')
def a2(self):
self.a2()
print('F2a2')
class F3(F2):
def __init__(self):
print('F3')
def a2(self):
print('F3a2')
obj = F3()
obj.a2()
obj.a1()
多态(多种形态):
6、字段:
普通字段(保存在对象中)
静态字段(保存在类中)
方法:
普通方法(保存在类中,调用者是对象)
静态方法(保存在类中,调用者是类,无需创建对象,可以有任意个参数)
###-------静态方法######
class F1:
@staticmethod
def a1(a1,a2):
print('Alex')
F1.a1(1,2)