• 面向对象编程一


    一、面向对象编程——Object Oriented Programming

    简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。

    面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。

    而面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。

    在Python中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)的概念。

    面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。

    class后面紧接着是类名,即Student,类名通常是大写开头的单词,紧接着是(object),表示该类是从哪个类继承下来的,继承的概念我们后面再讲,通常,如果没有合适的继承类,就使用object类,这是所有类最终都会继承的类。

    定义好了Student类,就可以根据Student类创建出Student的实例,创建实例是通过类名+()实现的:

     注意:特殊方法“__init__”前后分别有两个下划线!!!

    注意到__init__方法的第一个参数永远是self,表示创建的实例本身,因此,在__init__方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身。

    有了__init__方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init__方法匹配的参数,但self不需要传,Python解释器自己会把实例变量传进去:

    二. 面向对象的事例

    1. 计算圆的面积与周长

    from math import pi
    class Circle:
        def __init__(self,r):
            self.r=r
        def area(self):
            return  pi*(self.r**2)
        def perimeter(self):
            return 2*pi*self.r
    obj=Circle(3)
    
    print(obj.r)
    print(obj.area())
    print(obj.perimeter())

    2.计算正方形的面积与周长

    class Square:
        def __init__(self,long):
            self.long=long
    
        def area(self):
            return self.long**2
    
        def perimeter(self):
            return self.long*4
    
    bianchang=Square(5)
    print('正方形面积为:%d'%bianchang.area())
    print('正方形周长为:%d'%bianchang.perimeter())

    3.小明老张老王活动

    class AAA():
        def __init__(self,name,age,sex):
            self.name=name
            self.age=age
            self.sex=sex
    
        def climb(self):
            print('%s,%s岁,%s,上山去砍柴'%(self.name,self.age,self.sex))
    
        def drive(self):
            print('%s,%s岁,%s,开车去东北'% (self.name, self.age, self.sex))
    
        def play(self):
            print('%s,%s岁,%s,最爱大保健'% (self.name, self.age, self.sex))
    
    xm=AAA('小明','10','')
    xm.climb()
    xm.drive()
    xm.play()
    
    lz=AAA('老张','90','')
    lz.climb()
    lz.drive()
    lz.play()
    
    lw=AAA('老王','70','')
    lw.climb()
    lw.drive()
    lw.play()

    4.人狗大战

    class Person():
        role='person'
    
        def __init__(self,name,aggress,hp):
            self.name=name
            self.aggress=aggress
            self.hp=hp
    
        def attack(self,dog):
            dog.hp-=self.aggress
    
    class Dog():
        role='dog'
        def __init__(self,name,kind,aggress,hp):
            self.name=name
            self.kind=kind
            self.aggress = aggress
            self.hp = hp
    
        def bite(self,persons):
            persons.hp-=self.aggress
    
    erlang=Person('二郎神',100,1000)
    wang=Dog('哮天犬','狼狗',50,300)
    
    print(erlang.hp)
    wang.bite(erlang)
    print(erlang.hp)
    print(id(Person.role))
    print(id(Dog.role))
  • 相关阅读:
    25-javaweb接入支付宝支付接口
    4-js 函数
    24-filter-拦截器
    23-新建maven 项目
    22-maven-安装与配置
    15-matlab矩阵运用
    2018.7.18 div,section,article的区别和使用
    2018.7.17 牛客网训练
    2018.7.16常用推荐算法
    2018.7.15 解决css中input输入框点击时去掉外边框方法
  • 原文地址:https://www.cnblogs.com/strive-man/p/8511361.html
Copyright © 2020-2023  润新知