面向对象的编程思想及类的使用

面向对象的编程思想
​ 核心是对象二字,对象是特征与技能的结合体
​ 基于该思想编写程序(脑子里始终想的是对象二字),就好比在创造一个世界,世界有一个个对象组成,
在上帝眼里任何不存在的事物都可以创造,是一中上帝式的思维方式
​ 优点:可拓展性强
​ 缺点:编程的复杂度要高于面向过程

类:
​ 对象是特征与技能的结合体,而类则是一些列对象相同的特征与技能的结合体
​ 强调:1.对象是具体存在的事物,而类是一个抽象的概念
​ 2.站在不同的角度总结出类与对象是的不同

​现实世界中:现有一个个具体存在的对象,然后对着人类文明的发展才总结出的类的概念
​在程序中:先定义类,后调用类来产生对象

站在老男孩选课的角度
总结出现实世界中的对象
学生对象1:
​ 特征:
学校 = ‘ oldboy’
​ name = ‘egon’
​ age = ‘79’
​ sex = ‘female’
​ 技能:
​ 选课

学生对象2:
​ 特征:
学校 = ‘ oldboy’
​ name = ‘bgon’
​ age = ‘45’
​ sex = ‘female’
​ 技能:
​ 选课

学生对象3:
​ 特征:
学校 = ‘ oldboy’
​ name = ‘cgon’
​ age = ‘60’
​ sex = ‘male’
​ 技能:
​ 选课


在程序中
1.先定义类
class OldboyStudent:
# 相同的特征
school = 'oldboy'

# 相同的技能
def choose_course(self):
print('choose course')

print('=====>>>>')
类是一些列对象相同的特征(变量)与技能(函数)的结合体,即类体重最常见的就是变量与函数的定义,
但其实类体中是可以存在任意python代码的
类体代码会在类体定义阶段立即执行,会产生一个名称空间,用来将类体代码的名字丢进去,产看方式如下
print(OldboyStudent.school) # print(OldboyStudent.__dict__['school'])
print(OldboyStudent.choose_course)
print(OldboyStudent.__dict__) # 查看类的名称空间
.(点后面的都是属性)

修改数据
OldboyStudent.school = 'OLDBOY'
print(OldboyStudent.__dict__)

增加数据
OldboyStudent.county = 'China'
print(OldboyStudent.county)

删除数据
del OldboyStudent.county
print(OldboyStudent.__dict__)

OldboyStudent.choose_course(123) # 运行报错
print(OldboyStudent.choose_course)

总结:
1.类就是一个名称空间,或者说是一个用来寻访变量和函数的容器
2.类的用途之一就是当做名称空间从其内部取出名字来使用
3.类的用途之二是调用类来产生对象

2.后调用来产生对象
调用类的过程称之为类的实例化,调用类的返回值称之为类的一个对象/实例


调用类发生了??
1.会产生一个对象,然后返回

stu1 = OldboyStudent()
stu2 = OldboyStudent()
stu3 = OldboyStudent()
#
print(stu1.__dict__)
print(stu2.__dict__)
print(stu3.__dict__)

不同的属性
学生1的不同特征
​name = ‘egon’
​age = ‘79’
sex = ‘female’
stu1.name = 'egon'
stu1.age = 79
stu1.sex = 'female'
print(stu1.__dict__)

学生2的不同特征
​name = ‘bgon’
age = ‘45’
sex = ‘female’
stu2.name = 'bgon'
stu2.age = 45
stu2.sex = 'female'
print(stu2.__dict__)

学生3的不同特征
​name = ‘cgon’
age = ‘60’
sex = ‘male’
stu3.name = 'cgon'
stu3.age = 60
stu3.sex = 'male'
print(stu3.__dict__)

但是这样会有代码冗余问题
为对象定制自己独有的特征

class OldboyStudent:
# 相同的特征
school = 'oldboy'

# 相同的技能
def choose_course(self):
print('choose course')

stu1 = OldboyStudent()
stu2 = OldboyStudent()
stu3 = OldboyStudent()

def init(obj,name,age,sex):
obj.name = name
obj.age = age
obj.sex = sex
#
init(stu1.'egon',79,'female')
init(stu2.'bgon',45,'female')
init(stu3.'cgon',60,'male')


print(stu1.__dict__)
print(stu2.__dict__)
print(stu3.__dict__ )


简化方式2

class OldboyStudent:
# 相同的特征
school = 'oldboy'

def __init__(obj,name,age,sex):
obj.name = name
obj.age = age
obj.sex = sex

# 相同的技能
def choose_course(self):
print('choose course')

# 调用类发生了
# 1.产生了一个空对象,然后返回
# 2.会触发类中__init__函数的执行

stu1 = OldboyStudent('egon',79,'female')
stu2 = OldboyStudent('bgon',45,'female')
stu3 = OldboyStudent('cgon',60,'male')

# print(stu1.__dict__)
# print(stu2.__dict__)
# print(stu3.__dict__)

# 总结__init__函数的功能
# 1.实在实例化时就为对象初始自己独有的特征
# 注意点:__init__函数不能有返回值
stu1.xxx = 111
print(stu1.__dict__)



class OldboyStudent:
school = 'oldboy'
def __init__(obj,name,age,sex):
obj.name = name
obj.age = age
obj.sex = sex

def choose_course(self):
print('choose course')

stu1 = OldboyStudent('egon',79,'female')

先从对象自己的名称空间中,没有则去所属的类中查找

类中定义的变量是所有对象共享的,类也可以来使用

原文地址:https://www.cnblogs.com/dengyanchuan/p/10400933.html