面向过程 vs 函数
面向过程编程
1、重复代码多
2、可读性差
函数式编程 vs 面向对象编程
面向对象第一个优点:类是一组相似功能的集合,让我代码的组织结构更加清晰规范化
面向对象的第二优点:上帝的思维,用面向对象设计程序,
类是一个公共模板,对象去操作使用这个公共模板
类和对象
类是具似相同功能和属性的一类实物
对象是类的具体体现,具体到一个,具有类的属性,且还有自己的独特属性
# 下面就是一个例子:
class Human:
'''
此类是构建一个人类
'''
# 第一部分:静态属性、属性、变量、静态字段
mind = "有思想"
emotion = "感情丰富"
body_list = ["灵活", "矫健", "长寿"]
# 第二部分:动态属性、方法、函数
def eat(self):
print("特别会吃")
def work(self):
print("要做很多活儿")
print(Human.__dict__) # 查看类中的所有内容,得到的是一个字典
{'__module__': '__main__', '__doc__': '\n 此类是构建一个人类\n ',
'mind': '有思想', 'emotion': '感情丰富', 'body_list': ['灵活', '矫健', '长寿'],
'eat': <function Human.eat at 0x000000000283A9D8>,
'work': <function Human.work at 0x000000000283A950>,
'__dict__': <attribute '__dict__' of 'Human' objects>,
'__weakref__': <attribute '__weakref__' of 'Human' objects>}
类的使用:
一、静态属性
1、类名
查看类中的 所有 内容 类名.__dict__,查看单个也可以用,
使用 __dict__只是查询类中的所有内容,不能增删改类中的内容,尽量不要查询单个属性.
1、通过类名
print(Human.__dict__['mind']) # 查
Human.__dict__['emotion'] = None # 改
print(Human.__dict__['emotion'])
2、万能的点.
通过类名和点,对类的属性进行增删改查
2、万能的点
Human.learn = '要读书学习' # 增
del Human.emotion # 删
Human.mind = '多动脑' # 改
print(Human.emotion) # 查
二、方法
3、代码中除去(静态方法,类方法)一般不用类名去执行类中的方法,类名主要是操作类的属性的,对象主要操作类中的方法。
print(Human.work) # 打印的是方法(函数)的内存地址
Human.work(123) # 一般不用类名执行类中的方法,而是用对象;self位置参数可随意传
对象,实例化
obj = Human() # 实例化过程,实例化一个对象,产生一个对象.
print(obj) # 打印的是类的内存地址
# 实例化一次形成一个对象,对象的内存地址不同,即不同的对象
实例化经历3步:
1.在内存中开辟了一个对象空间
2.自动执行了__init__(seif)方法,解释器把对象空间地址传给了self
3.执行__init__的代码,给对象空间封装属性
class Human:
mind = "有思想"
emotion = "感情丰富"
body_list = ["灵活", "矫健", "长寿"]
def __init__(self):
self.n = "元芳"
self.a = 23
self.s = "男"
obj = Human()
print(Human().__dict__) # {'n': '元芳', 'a': 23, 's': '男'}
print(obj.__dict__) # 结果同上,实例化的一个对象
class Human:
mind = "有思想"
emotion = "感情丰富"
body_list = ["灵活", "矫健", "长寿"]
def __init__(self, name, age, sex):
self.n = name
self.a = age
self.s = sex
fang = Human("元芳", 23, "男") # 实例化一个对象
print(fang.__dict__) # {'n': '元芳', 'a': 23, 's': '男'}
对象的角度操作对象,类
1,对象查看对象空间的所有属性,(能改能删)不建议用__dict__增删改对象的属性
2,对象操作对象空间的属性. 万能的点 .可以增删改查
3,对象查看类中的静态属性,只能查看!!!
4,对象调用类中的方法.(一个类可以实例化多个对象)