一、面向对象
1、三种编程风格
(1)面向过程编程
(2)函数式编程
(3)面向对象便编程
2、类:把一类事物的相同特征和动作整合到一起
3、对象:基于类而创建的一个具体的事物,也就是特征和动作整合到一起
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(school):
print('%s 学校正在考试' %school['name'])
def zhao_sheng(school):
print('%s %s 正在招生' %(school['type'],school['name']))
return init(name,addr,type)
s1=school('oldboy','沙河','私立学校')
print(s1)
print(s1['name'])
s1['zhao_sheng'](s1)
s2=school('清华','北京','公立学校')
print(s2)
print(s2['name'],s2['addr'],s2['type'])
s2['zhao_sheng'](s2)
二、面向对象设计
# 用面向对象编程独有的语法class去实现面向对象设计
class Dog:
def __init__(self,name,gender,type):
self.name=name
self.gender=gender
self.type=type
def bark(self):
print('一条名字为[%s]的[%s],狂吠不止' %(self.name,self.type))
def yao_ren(self):
print('[%s]正在咬人' %(self.name))
def chi_shi(self):
print('[%s]正在吃屎' %(self.type))
dog1=Dog('alex','female','京巴')
1、类相关知识
(1)经典类
class Chinese:
'这是一个类'
pass
print(Chinese)
# 实例化到底干了什么?
p1=Chinese() # 实例化
print(p1)
(2)新式类
class Chinese(object):
pass
# 在python3中两种类是一样的
(3)属性
'''
1.数据属性
2.函数属性
'''
class Chinese:
'这是一个的类'
sx='人'
def ai_guo():
print('爱国')
def tuan_jie(self):
print('团结')
print(Chinese.sx)
Chinese.ai_guo()
print(dir(Chinese))
print(Chinese.__dict__) # 查看类的属性字典
#------------------------------类的方法-----------------------------------
print(Chinese.__name__)
print(Chinese.__doc__)
print(Chinese.__bases__)
print(Chinese.__module__)
(4)初始化函数__init__ -不能写返回值
class Chinese:
'这是一个的类'
sx='人'
# def __init__(name, age, gender):
# dic = {
# 'name':name,
# 'age':age,
# 'gender':gender
# }
def __init__(self, name, age, gender):
self.mingzi = name
self.nianji = age
self.xingbie = gender
def ai_guo():
print('爱国')
def tuan_jie(self):
print('%s团结' %self.mingzi)
p1 = Chinese('asd', 18, 'male')
print(p1.__dict__)
# 调用
print(p1.__dict__['mingzi'])
print(p1.mingzi)
print(p1.sx)
Chinese.tuan_jie(p1)class Chinese:
'这是一个的类'
sx='人'
# def __init__(name, age, gender):
# dic = {
# 'name':name,
# 'age':age,
# 'gender':gender
# }
def __init__(self, name, age, gender):
self.mingzi = name
self.nianji = age
self.xingbie = gender
def ai_guo():
print('爱国')
def tuan_jie(self):
print('团结')
p1 = Chinese('asd', 18, 'male')
print(p1.__dict__)
# 调用
print(p1.__dict__['mingzi'])
print(p1.mingzi)
(5)类的增删改查
class Chinese:
country='China'
def __init__(self,name):
self.name=name
def play_ball(self,ball):
print('%s 正在打 %s' %(self.name))
#查看
print(Chinese.country)
#修改
Chinese.country='CHINA'
print(Chinese.country)
p1=Chinese('alex')
print(p1.__dict__)
print(p1.country)
#增加
Chinese.dang='党'
# print(Chinese.dang)
# print(p1.dang)
#删除
del Chinese.dang
del Chinese.country
print(Chinese.__dict__)
# print(Chinese.country)
def eat_food(self,food):
print('%s 正在吃%s' %(self.name,food))
Chinese.eat=eat_food
print(Chinese.__dict__)
p1.eat('屎')
def test(self):
print('test')
Chinese.play_ball=test
p1.play_ball()# Chinese.play_ball(p1)
(6)实例属性的增删改查
class Chinese:
country='China'
def __init__(self,name):
self.name=name
def play_ball(self,ball):
print('%s 正在打 %s' %(self.name,ball))
p1=Chinese('alex')
print(p1.__dict__)
#查看
print(p1.name)
print(p1.play_ball) # 访问类
#增加
p1.age=18
print(p1.__dict__)
print(p1.age)
# 纯属多余,忘记即可
# def test(self):
# print('来自实例函数属性')
#
# p1.test = test
# print(p1.__dict__)
#不要修改底层的属性字典-不要这么做
#p1.__dict__['sex']='male'
#print(p1.__dict__)
#print(p1.sex)
#修改
p1.age=19
print(p1.__dict__)
print(p1.age)
#删除
del p1.age
print(p1.__dict__)
#------------------------类和实例结合---------------------------
class Chinese:
country='China'
def __init__(self,name):
self.name=name
def play_ball(self,ball):
print('%s 正在打 %s' %(self.name,ball))
p1=Chinese('alex')
print(p1.country)
p1.country='CHA'
print('类的--->',Chinese.country) # 类的属性不变,只变实例的属性
print('实例的',p1.country)
#-----------------------------作用域----------------------------
country='中国-------------------'
class Chinese:
country='中国'
def __init__(self,name):
self.name=name
print('--->',country)
p1 = Chinese('asd') # 输出 中国-------------------
print(Chinese.__dict__)
print(Chinese.country) # 用. 调用是类,不用则跟类没关系