2019年8月6日(面向对象的编程基础)

1、面向对象编程基础

1)什么是面向对象编程?      

       把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为(class),通过类的封装(encapsulation)隐藏内部细节,通过继承(inheritance)实现类的特化(specialization)和泛化(generalization),通过多态(polymorphism)实现基于对象类型的动态分派。

2)什么是对象?

       程序中的数据和操作数据的函数是一个逻辑上的整体,我们称之为“对象”,而我们解决问题的方式就是创建出需要的对象并向对象发出各种各样的消息,多个对象的协同工作最终可以让我们构造出复杂的系统来解决现实中的问题。

2、类和对象

        简单的说,类是对象的蓝图和模板,而对象是类的实例。这个解释虽然有点像用概念在解释概念,但是从这句话我们至少可以看出,类是抽象的概念,而对象是具体的东西。在面向对象编程的世界中,一切皆为对象,对象都有属性和行为,每个对象都是独一无二的,而且对象一定属于某个类(型)。当我们把一大堆拥有共同特征的对象的静态特征(属性)和动态特征(行为)都抽取出来后,就可以定义出一个叫做“类”的东西。

3、函数的写法

"""
标识    函数名字 ():
    有冒号就要缩进一个tab
在Python中所有的函数都有返回值,如果你没有给予return则默认返回出None,如果你给予了,则返回你给予的值
""""
def    funcName():
    .....
    return ....
 
"""
标识    类名      ()     :
    有冒号就要缩进一个tab
"""
class  className(object):
    ........

#输入一个数字,返回是这个数字的平方。

def joker(x):
    return x ** 2
print(joker(100))

#进度条

import time
def joker():
    for i in range(1,101):
        time.sleep(1)
        print('%s%d%%\r'%i,end=" ",flush=true)

joker()

—————————————————————————————————————————————————————————————————

"""
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 刷新缓冲区.
"""
————————————————————————————————————————————————————————————————————————
"""
类中的函数可以有自己的参数
当你想共享这个参数的时候,那么就打上"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)
        
J = A(1000)
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)

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)
Student(10,5)
——————————————————————————————————————————————————————————————————
在Python中可以使用class关键字定义类,然后在类中通过之前学习过的函数来定义方法,这样就可以将对象的动态特征描述出来,代码如下所示。
# 在Python2中这个object一定要写,但是在Python3中可写可不写(默认就继承了object).
#
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))
    # PEP 8要求标识符的名字用全小写多个单词用下划线连接
    # 但是很多程序员和公司更倾向于使用驼峰命名法(驼峰标识)
    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("只能看动画片")
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('不能看')
 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()
 
案例4:
#判断一个数是不是素数
class Name(object):
    def __init__(self,number):
        for i in range(2,number):
            if number % i ==0:
                print('不是素数')
                break
            else:
                print('是素数')

# 实例
student = Student()
 
说明:写在类中的函数,我们通常称之为(对象的)方法,这些方法就是对象可以接收的消息
———————————————————————————————————————————————————————————————————————
5、王者荣耀案例

# 王者农药
# 人机对战
# 1.点击人机,多人对战,对战的按钮(输入)
# 2.挑选人物(典韦,赵云,鲁班)
# 3.显示战力,防御
# 4.人物确定,随机出1个人机,包括战力,名字...等信息显示
# 5.输入开始按钮...
# 6.进入加载页面...

 

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))

 

    def random_people(self):
        """
        电脑随机选择人物..
        """
        print(' 电脑开始选择英雄:')
        people = np.random.choice(['1','2','3'])
        if peop

 

 

 

转载于:https://www.cnblogs.com/wangying317/p/11310112.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值