面向对象编程一

时间:2021-09-22 17:21:50

一、面向对象编程——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))