06_面向对象
1.什么是面向对象编程?
-以前使用函数
-类 + 对象
2.什么是类,什么是对象,又有什么关系?
举个栗子:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
class 类: def 函数1(): pass def 函数2(): pass #obj是对象、实例化的过程 obj = 类() obj.函数1()
=========面向对象不好?========
有时候,函数编程可以实现,但是比较麻烦。
面向对象非常简单的就能实现。
3.什么时候适用面向对象?
—如果多个函数须传入多个共同的参数时
—根据一个模板创建某些东西
—应用场景
举个栗子:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
class SSH: def __init__(self,host,port,pwd,username): self.host = host ... def connection(self): #去创建连接 self.conn = 和服务器创建的连接对象() def close(): #关闭连接 self.conn.关闭 def upload(self): self.conn 使用连接上传文件 def cmd(self): self.conn 使用连接执行命令 obj=SSH(....) obj.connection() obj.upload() obj.close() def upload(): #连接服务器 #上传文件 #关闭 def cmd(): #连接服务器 #执行命令 #关闭 def upload_cmd(): #连接服务器 #上传文件 #执行命令 #关闭
4.self是什么
self就是调用当前方法的对象
-静态字段使用场景,每个对象中保存相同的东西时,可以使用静态字段
举个栗子
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
class Foo: #公有属性/静态字段 country = "中国" def __init__(self,name,count): #普通属性/普通字段 self.NAME = name self.COUNT = count def bar(self): pass obj1=Foo('江苏',1000000) obj1.bar() obj2=Foo('浙江',222222) obj2.bar()
5.封装
- 类中封装了属性和方法
- 对象中封装了普通属性的值
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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.a.N 继承: class F1: def __init__(self): print("F1") def a1(self): print("F1a1") class F2(F1): def __init__(self): print("F2") def a1(self): print("F2a1") class F3(F2): def __init__(self): print("F3") def a1(self): print("F3a1") obj = F3() obj = a1()
多态(多种形态):
python默认支持多态
6.
属性/字段:
普通属性(保存在对象中)
静态属性(保存在类中)
方法:
普通方法(保存在类中,调用者就是对象,至少有一个self参数)
静态方法(保存在类中,调用者是类,无需创建对象,可以有任意个参数):
和函数使用一样。
class F1:
@staticmethod
def a1():
print('alex')
F1.a1()
人生苦短,我用Python