面向对象与面向过程的含义与区别以及类的增删改查,类的基础代码解析

# 编程
# 概念:用特定语法与数据结构及算法组成的代码来告诉计算机如何执行任务的过程,编程其实就是一个将具体世界进行抽象化的过程,
# 多态就是抽象化的一种体现,把一系列具体事物的共同点抽象出来, 再通过这个抽象的事物, 与不同的具体事物进行对话。

# 面向过程与面向对象

# 面向过程
# 概念:设计解决问题的步骤,先干什么后干什么,将大问题细化为小问题,将大程序拆解为小程序,机械的思维方法
# 优点:a 将复杂问题流程化,简单化
# 缺点:可扩展性差(适合不需要经常扩展及修改功能的场景)

# 面向对象
# 概念:以上帝视角定义对象的的所有特征(对象就是特征与技能的结合体)
# 优点:可扩展性高
# 缺点:编程复杂度高
# 三大特征:
# 封装(在类中对数据的赋值,内部调用对外部是透明的,这使得类变成了一个胶囊或容器,里面包含类的数据和方法)
# 继承(一个类可以派生出子类,父类的属性及方法自动被子类继承)
# 多态(一个接口,多种实现,一个基类派生出不同的子类,每个子类在继承了同样的方法名的同时又对父类的方法做了不同的实现,这就是同一种事物表现出的多种形态)



# 类的解析


class Hero:
camp = '屠夫'
# 封装就是使用 __init__将属性封装到某个具体对象中,然后通过对象直接或self间接获取封装的属性
def __init__(self, name, attack, live):
# self就是实例本身,实例化时,python解释器会自动将实例通过self参数传进去
# __init__即为构造方法或初始化方法,在实例化过程中自动执行,目的是初始化实例的属性,每个实例通过__init__初始化的属性都是独有的
self.name = name # 将name属性绑定到self实例上
self.attack = attack
self.live = live

def hero_die(self): # 普通方法
# hero_die在被调用时不需要传实例,解释器会自动传入,因为属性已经被绑定到self实例上,
print(self.name)

def attack1(self, enemy): # 普通方法
enemy.live = enemy.live - self.attack
print('live = {}'.format(self.live))
if self.live < 0:
print('{} is already die'.format(self.name))
else:
return 'enemy.live = {}'.format(enemy.live)

def __del__(self): # 析构方法(解构方法)
print("running del method, this person must be died.")


# 类的实例化
hero1 = Hero('王八糕', 80, 900) # 类的实例化,# 先调用类产生空对象hero1,然后调用Hero.__init__('王八糕', 80, 900)
hero2 = Hero('猪头三', 500, 500) # 类的实例化

# 类的名称空间查看
print(hero1.__dict__) # 查看结果为实例的属性字典

# 类的增\删\改\查
Hero.camp1 = 'xdd' # 增
del Hero.camp # 删
Hero.camp = 'xdd' # 改
print(Hero.camp) # 查

# 通过对象调用方法
hero1.hero_die() # hero1.die()不需要传参,解释器会自动将类的属性参数传入通过self

# 类的两种属性
# a 数据属性

print(id(hero1.camp)) # 数据属性是所有对象共享的,id都一样
print(id(hero2.camp1)) # 数据属性是所有对象共享的,id都一样
b 函数属性
print(id(hero1.hero_die()))  # 类的函数数据是绑定给对象用的,称为绑定到对象的方法 id不一样
print(id(hero2.hero_die())) # 类的函数数据是绑定给对象用的,称为绑定到对象的方法 id不一样
print(id(Hero.hero_die)) # id不一样

猜你喜欢

转载自www.cnblogs.com/zhoudabing/p/10425057.html