神奇语言 python 初识面向对象
一.面向对象初识:
1.1 回顾面向过程编程vs函数式编程
#面向过程编程,测量对象的元素个个数 s1="fajfakljfalfa8" count=0 for i in s1: count +=1 print(count)
函数编程式 def foo(s): count=0 for i in s: count+=1 return count foo("adasdadas") foo([1,2,3,4])
通过对比可知:函数编程较之面向过程编程最明显的两个特点:
1 减少代码的重用性
2 增强代码的可读性
1.2函数编程vs面向对象编程
#函数式编程 #auth 认证相关 def login(): pass def regisgter(): pass #account 账户相关 def func1(): pass def func2(): pass #购物车相关 def shopping(username,money) pass def check_paidgoods(username,money) pass def check_unpaidgoods(username,money): pass def save(username,money): pass
面向对象式编程 class LoginHandler: def login(self): pass def regisgter(self): pass class Account: def func1(self): pass def func2(self): pass class ShoppingCar: def shopping(username,money): pass def check_paidgoods(username,money): pass def check_unpaidgoods(username,money): pass def save(username,money): pass
# 通过对此可以看出面向对象第一个有点:
面向对象编程:是一类相似功能函数的集合,使你的代码更清晰化,更合理化.
说第二个优点之前,先看看什么是面向对象.
面向对象的程序设计的核心是对象(上帝式思维),要理解u地向为何物,必须把自己当成上帝,上帝眼里世间存在的万物皆为对象,不存在也可以创造出来.
类:就是具有相同属性和功能的一类事物
对象:就是类的具体的表现
面向对象的第二个优点:
面向对象,要拥有上帝的视角看问题,类其实就是一个公共的模板,对象就从具体的模板实例化出来.
1.3 类的结构
class Human: ""' 此类主要是构建人类 """ mind="有思想"#第一部分:静态属性 属性 静态变量 静态字段 dic={} li=[] def work(self):#第二部分:方法 函数 动态属性 print("人类会工作") """
class 是关键字与def用法相同,定义一个类. Human是此类的类名,类名使用驼峰体命名风格,首字母大写,私有类可用一个下划线开头. 累的结构从大方向来说就分为两部分 静态变量 动态方法
"""
二.从类明德角度研究类
2.1 类名操作静态属性
2.11 第一种,查看类中的所有内容:类名.__dict__方式。
class Human: """ 此类主要是构建人类 """ mind = '有思想' # 第一部分:静态属性 属性 静态变量 静态字段 dic = {} l1 = [] def work(self): # 第二部分:方法 函数 动态属性 # print(self) print('人类会工作') print(Human.__dict__) print(Human.__dict__['mind']) Human.__dict__['mind'] = '无脑' print(Human.__dict__) # 错误 #通过这种方式只能查询,不能增删改. # 第一种方式只用户查询全部内容(一般不用单独属性查询).
2.12第二种:万能的点
class Human: """ 此类主要是构建人类 """ mind = '有思想' # 第一部分:静态属性 属性 静态变量 静态字段 dic = {} l1 = [] def work(self): # 第二部分:方法 函数 动态属性 # print(self) print('人类会工作') """ print(Human.mind)#查 Human.mind="无脑"#改 print(Human.mind) del Human.mind #删 Human.walk = '直立行走' print(Human.walk) # 通过万能的点 可以增删改查类中的单个属性
class Human: """ 此类主要是构建人类 """ mind = '有思想' # 第一部分:静态属性 属性 静态变量 静态字段 dic = {} l1 = [] def work(self): # 第二部分:方法 函数 动态属性 # print(self) print('人类会工作') """ print(Human.mind)#查 Human.mind="无脑"#改 print(Human.mind) del Human.mind #删 Human.walk = '直立行走' print(Human.walk) # 通过万能的点 可以增删改查类中的单个属性
对以上两种做一个总结:如果想查询类中的所有内容,通过 第一种__dict__方法,如果只是操作单个属性则用万能的点的方式。
2.2 类名操作动态方法
前提:除了两个特殊方法:静态方法,类方法之外,一般不会通过类名操作一个类中的方法
class Human: """ 此类主要是构建人类 """ mind = '有思想' # 第一部分:静态属性 属性 静态变量 静态字段 dic = {} l1 = [] def work(self): # 第二部分:方法 函数 动态属性 # print(self) print('人类会工作') def tools(self) print('人类会使用工具') Human.work(111) Human.tools(111) 下面可以做,但不用。 Human.__dict__['work'](111)
三. 从对象的角度研究类
3.1 什么是对象
对象是从类中出来的,只要是类名加上(),这就是一个实例化过程,这个就会实例化一个对象。
其实实例化一个对象总共发生了三件事:
1,在内存中开辟了一个对象空间。
2,自动执行类中的__init__方法,并将这个对象空间(内存地址)传给了__init__方法的第一个位置参数self。
3,在__init__ 方法中通过self给对象空间添加属性。
3.2 对象操作对象空间属性
3.21 对象查询对象中所有属性。 对象.__dict__
3.22 对象操作对象中的单个属性。 万能的点 .
3.3 对象查看类中的属性
class Human: mind = '有思想' language = '实用语言' def __init__(self,name,sex,age,hobby): self.n = name self.s = sex self.a = age self.h = hobby obj = Human('barry','男',18,'运动') print(obj.mind) print(obj.language) obj.a = 666 print(obj.a)
3.4 对象操作类中的方法
class Human: mind = '有思想' language = '实用语言' def __init__(self,name,sex,age,hobby): self.n = name self.s = sex self.a = age self.h = hobby def work(self): print(self) print('人类会工作') def tools(self): print('人类会使用工具') obj = Human('barry','男',18,'运动') obj.work() obj.tools()
self:
self其实就是类中方法的第一个位置参数,只不过解释器会自动将调用这个函数的对象传给self.所以咱们把类中的方法的第一个参数约定俗称设置self,代表这个就是对象.