2019年8月6日(面向对象的编程基础)
1、
1)什么是面向对象编程?
把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为(class),通过类的封装(encapsulation)隐藏内部细节,通过继承(inheritance)实现类的特化(specialization)和泛化(generalization),通过多态(polymorphism)实现基于对象类型的动态分派。
2)什么是对象?
程序中的数据和操作数据的函数是一个逻辑上的整体,我们称之为“对象”,而我们解决问题的方式就是创建出需要的对象并向对象发出各种各样的消息,多个对象的协同工作最终可以让我们构造出复杂的系统来解决现实中的问题。
def joker(x):
return x ** 2
print(joker(100))
"""
1.导入库, import 库名
2. for 循环,如果计数的情况则使用
开始 结束 不长
range的区间是一个前闭后开.
range(start,end,[step])
3. 格式化输出
3.1 %-->%(),%d后接整型,%f后接浮点,%s后接字符串.
3.2 {}-->format(),它可以直接传入任何类型,然后格式化输出.
1.导入库, import 库名
2. for 循环,如果计数的情况则使用
开始 结束 不长
range的区间是一个前闭后开.
range(start,end,[step])
3. 格式化输出
3.1 %-->%(),%d后接整型,%f后接浮点,%s后接字符串.
3.2 {}-->format(),它可以直接传入任何类型,然后格式化输出.
4.print 控制台(terminal)打印
4.1 end 以什么方式结尾,默认以换行符"\n"
4.2 flush 刷新缓冲区.
"""
4.1 end 以什么方式结尾,默认以换行符"\n"
4.2 flush 刷新缓冲区.
"""
————————————————————————————————————————————————————————————————————————
"""
类中的函数可以有自己的参数
当你想共享这个参数的时候,那么就打上"self"的印记.
"""
类中的函数可以有自己的参数
当你想共享这个参数的时候,那么就打上"self"的印记.
"""
class A(object):
def __init__(self,a):
self.a = a
def B(self,b):
self.b = b
print(b)
def C(self):
print(self.b)
def __init__(self,a):
self.a = a
def B(self,b):
self.b = b
print(b)
def C(self):
print(self.b)
J = A(1000)
J.B(10)
J.C()
J.B(10)
J.C()
————————————————————————————————————————————————————————————————————————
4、定义类
# object 不是一个参数
"""
定义类只有两步:
1. 使用标识符class ClassName(object):
2. 重写__init__函数,但是需要记住,一定要打上一个"self"的标记
因为后面会学到继承,当在继承的时候可能就会有函数名相撞的情况.
或者说,类中会含有多个变量,多个函数,那么就需要使用"self"手段去区分.
3. 类的传参是在__init__函数中的.需要注意的是,如果你的参数可能被多个函数都使用,那么
你才在__init__函数中去定义参数
"""
class Student(object):
def __init__(self,name):
# 多个打印用","进行分隔.
print(name)
"""
定义类只有两步:
1. 使用标识符class ClassName(object):
2. 重写__init__函数,但是需要记住,一定要打上一个"self"的标记
因为后面会学到继承,当在继承的时候可能就会有函数名相撞的情况.
或者说,类中会含有多个变量,多个函数,那么就需要使用"self"手段去区分.
3. 类的传参是在__init__函数中的.需要注意的是,如果你的参数可能被多个函数都使用,那么
你才在__init__函数中去定义参数
"""
class Student(object):
def __init__(self,name):
# 多个打印用","进行分隔.
print(name)
Student(100)
案例1:
#输入两个数字,打印这两个数的差、和、整除、取余、平方
class Student(object):
def __init__(self,a,b):
print("a+b",a+b)
print("a-b",a-b)
print("a//b",a//b)
print("a%b",a%b)
print("a**b",a**b)
def __init__(self,a,b):
print("a+b",a+b)
print("a-b",a-b)
print("a//b",a//b)
print("a%b",a%b)
print("a**b",a**b)
Student(10,5)
——————————————————————————————————————————————————————————————————
# 在Python2中这个object一定要写,但是在Python3中可写可不写(默认就继承了object).
#
class Student(object):
# __init__是一个特殊方法用于在创建对象时进行初始化操作
# 通过这个方法我们可以为学生对象绑定name和age两个属性
def __init__(self, name, age):
self.name = name
self.age = age
#
class Student(object):
# __init__是一个特殊方法用于在创建对象时进行初始化操作
# 通过这个方法我们可以为学生对象绑定name和age两个属性
def __init__(self, name, age):
self.name = name
self.age = age
def study(self, course_name):
print('%s正在学习%s.' % (self.name, course_name))
print('%s正在学习%s.' % (self.name, course_name))
# PEP 8要求标识符的名字用全小写多个单词用下划线连接
# 但是很多程序员和公司更倾向于使用驼峰命名法(驼峰标识)
def watch_av(self):
if self.age < 18:
print('%s只能观看《熊出没》.' % self.name)
else:
print('%s正在观看岛国爱情动作片.' % self.name
# 但是很多程序员和公司更倾向于使用驼峰命名法(驼峰标识)
def watch_av(self):
if self.age < 18:
print('%s只能观看《熊出没》.' % self.name)
else:
print('%s正在观看岛国爱情动作片.' % self.name
#输入一个年龄,如果年龄大于18岁,可观看爱情片
#如果小于18岁,只能看动画片
class people(object):
def __init__(self,i):
if i>18:
print("可以看爱情片")
else:
print("只能看动画片")
if i>18:
print("可以看爱情片")
else:
print("只能看动画片")
people(19)
案例2:
#输入一个年龄,如果年龄大于18小于20岁,可观看4级
#如果大于20小于50岁,岛国
#如果大于50岁,不能看
class joker(object):
def __init__(self,age):
if 18<=age<=20:
print('四级')
elif 20<age<=50:
print('岛国')
else:
print('不能看')
if 18<=age<=20:
print('四级')
elif 20<age<=50:
print('岛国')
else:
print('不能看')
joker(18)
案例3:
#3个函数,第一个函数:年龄判断:<18,18<40,40>
第二个函数:性别判断:男,女,未知
第三个函数:返回年轻,中年,老年
class jy(object):
def __init__(self,age,gener):
self.age = age
self.gener= gener
def Age(self):
if self.age<18:
print('年轻')
elif 18<self.age<40:
print('中年')
else:
print('老年')
def Gener(self):
if self.gener=='男':
print('男人')
elif self.gener=='女':
print('女人')
else:
print('未知')
name = wy(23,'女')
name.Age()
name.Gener()
def __init__(self,age,gener):
self.age = age
self.gener= gener
def Age(self):
if self.age<18:
print('年轻')
elif 18<self.age<40:
print('中年')
else:
print('老年')
def Gener(self):
if self.gener=='男':
print('男人')
elif self.gener=='女':
print('女人')
else:
print('未知')
name = wy(23,'女')
name.Age()
name.Gener()
案例4:
#判断一个数是不是素数
class Name(object):
def __init__(self,number):
for i in range(2,number):
if number % i ==0:
print('不是素数')
break
else:
print('是素数')
def __init__(self,number):
for i in range(2,number):
if number % i ==0:
print('不是素数')
break
else:
print('是素数')
# 实例
student = Student()
———————————————————————————————————————————————————————————————————————
import numpy as np
class wangzhe:
def __init__(self):
"""
初始化王者农药类.
Arguments:
----------
zhaoyun[zhaoyun_xx]:关于人物赵云的参数
dianwei[dianwei_xx]:关于人物典韦的参数
luban[luban_xx]:关于人物鲁班的参数
"""
self.zhaoyun = '[1] 赵云'
self.zhaoyun_zhanli = 250
self.zhaoyun_fangyu = 250
self.dianwei = '[2] 典韦'
self.dianwei_zhanli = 300
self.dianwei_fangyu = 1000
self.luban = '[3] 鲁班'
self.luban_zhanli = 10000
self.luban_fangyu = 10
def choose_model(self):
"""
选择模式
-------
可选模式暂时只有一个1.
"""
mode = input('可选模式[1/2]:1.人机对战,2.多人对战')
if mode == '1':
self.choose_people()
else:
print('🤮 正在开发中...不要着急!')
def choose_people(self):
"""
用户选择人物..
"""
people = input('请选择你的英雄:(%s,%s,%s)'%(self.zhaoyun,self.dianwei,self.luban))
if people == '1':
print('🐉 赵云:')
self.information(self.zhaoyun_zhanli,self.zhaoyun_fangyu)
self.random_people()
elif people == '2':
print(' 典韦:')
self.information(self.dianwei_zhanli,self.dianwei_fangyu)
self.random_people()
elif people == '3':
print(' 鲁班:')
self.information(self.luban_zhanli,self.luban_fangyu)
self.random_people()
else:
print('(⊙_⊙)? 不懂你的选择')
self.choose_people()
def information(self,zhanli,fangyu):
"""
打印各个人物的信息
Arguments:
---------
zhanli: 人物的战力参数
fangyu: 人物的防御参数
"""
print('战力:%s,防御%s'%(zhanli,fangyu))
class wangzhe:
def __init__(self):
"""
初始化王者农药类.
Arguments:
----------
zhaoyun[zhaoyun_xx]:关于人物赵云的参数
dianwei[dianwei_xx]:关于人物典韦的参数
luban[luban_xx]:关于人物鲁班的参数
"""
self.zhaoyun = '[1] 赵云'
self.zhaoyun_zhanli = 250
self.zhaoyun_fangyu = 250
self.dianwei = '[2] 典韦'
self.dianwei_zhanli = 300
self.dianwei_fangyu = 1000
self.luban = '[3] 鲁班'
self.luban_zhanli = 10000
self.luban_fangyu = 10
def choose_model(self):
"""
选择模式
-------
可选模式暂时只有一个1.
"""
mode = input('可选模式[1/2]:1.人机对战,2.多人对战')
if mode == '1':
self.choose_people()
else:
print('🤮 正在开发中...不要着急!')
def choose_people(self):
"""
用户选择人物..
"""
people = input('请选择你的英雄:(%s,%s,%s)'%(self.zhaoyun,self.dianwei,self.luban))
if people == '1':
print('🐉 赵云:')
self.information(self.zhaoyun_zhanli,self.zhaoyun_fangyu)
self.random_people()
elif people == '2':
print(' 典韦:')
self.information(self.dianwei_zhanli,self.dianwei_fangyu)
self.random_people()
elif people == '3':
print(' 鲁班:')
self.information(self.luban_zhanli,self.luban_fangyu)
self.random_people()
else:
print('(⊙_⊙)? 不懂你的选择')
self.choose_people()
def information(self,zhanli,fangyu):
"""
打印各个人物的信息
Arguments:
---------
zhanli: 人物的战力参数
fangyu: 人物的防御参数
"""
print('战力:%s,防御%s'%(zhanli,fangyu))
def random_people(self):
"""
电脑随机选择人物..
"""
print(' 电脑开始选择英雄:')
people = np.random.choice(['1','2','3'])
if peop
"""
电脑随机选择人物..
"""
print(' 电脑开始选择英雄:')
people = np.random.choice(['1','2','3'])
if peop