面向对象是一种编程思想,编程的目的是为了让计算机帮我完成一件事,衍生出现在的人机交互
我觉得就是功能和特征写好,然后让类去使用、或者说是与类去交互,就是面向对象。。。
#类:把一类事物的相同的特征和动作整合到一起,就是类
#类是一个抽象的概念
#对象:基于类而来创建的一个具体的事物也是特征和动作整合到一起而来的
#对象具体的存在
写个例子:
#学校类:
#特征:name,addr,type
#动作:考试,招生,等等
def school(name,addr,type):
def init(name, addr, type):
sch = {
'name': name,
'addr': addr,
'type': type,
"kao_shi": kao_shi,
"zhao_sheng": zhao_sheng
}
return sch
def kao_shi(school1):
print('%s正在考试'%school1["name"])
def zhao_sheng(school1):
print('%s %s正在招生'%(school1['type'],school1['name']))
return init(name,addr,type)
s1 = school('yibole','beijing','私立school')
s1['zhao_sheng'](s1)
s2 = school('hww','beijing','国家school')
s2['zhao_sheng'](s2)
编程最开始就是无组织无结构,从简单控制流中按部写指令
从上述的指令中提取重复的代码或逻辑,组织到一起便实现了代码复用而且代码由无结构走向了结构化,创建程序的过程变得更具有逻辑性
我们定义的函数都是与李玉函数外定义变量,然后作为参数传递给函数,这意味着:数据与动作是分离的
如果我们把数据和动作内嵌到一个结构(函数或类)里面,那我们就有了一个“对象系统”(对象就是数据和函数整合到一起的产物)
面向对象设计:将一类具体事务的数据与动作整合到一起,就是面向对象设计
面向对象编程:用定义类+实例/对象的方式去实现面向对象的设计
声明函数:
def functionName(args):
'函数文档字符串'
函数体
声明类
class 类名:
'类的文档字符串'
类体
声明类名的规范是首字母一定要大写(但是小写也没关系,只是一个规范)
class Chinese:
'这是一个中国人的类'
pass
print(Chinese)
Chinese()#运行和函数是一样的
实例与类
实例只有数据属性,而且class在实例在调用类的方法之后才会自动传一个self
class dog():
'这是一个狗类'
gou = '摇尾巴'
def __init__(self,name,age,gender):
self.mingzi = name
self.age = age
self.gender = gender
def kanmen(self):
print('%s会看门'%self.mingzi)
def change_time(self):
print('%s已经%s岁了'%(self.mingzi,self.age))
def jueyu(self):
print('%s已经做了绝育,已经是一个%s了'%(self.mingzi,self.gender))
# p1 = dog('bater','1','太监')
# p1.change_time()
# p1.jueyu()
p1 = dog('lazyegg','1','太监')
p1.jueyu()
print(dog.gou)
实例属性的增删改查:
p2 = Dog('landan','2','太监')
print(p2.__dict__)
查看:
print(p2.name)
增加数据属性:
p2.favourite = '绿豆糕'
print(p2.favourite)
修改:
p1.favourite = '猫草'
print(p1.favourite)
删除:
del p1.favourite
print(p1.__dict__)
==================================
一个需要注意的地方:
country = '中国'
class Chinese:
country = 'zhongguo'
def __init__(self, name):
self.name = name
print('---->',country)
def play_ball(self, ball):
print('%s正在打%s' % (self.name, ball))
p1 = Chinese('qqq') # p1为实例
print(p1.country)
在__init__下的,country调用的是类外的对象,因为使用点来调用的话要么是累属性要么是实例属性,只要遵循这个原则就会在类内部去调用,没有点调用就跟类就没有关系,跟实例也没有关系,所以使用的就是一个普通的变量