面向对象基础

一.面向对象程序设计

  1.面向过程程序设计:

   侧重过程二字,即解决问题的步骤,先干什么,后干什么,应用场景比较固定

  2.面向对象编程:

  侧重对象二字,解决了程序的扩展性问题,对某一个对象的修改,会反应到整个体系中,比如在游戏中对一个人物特征和技能的修改,应用于需求经常变化的场景。

  3.类与对象的概念

  类:即类别种类,是一系列对象相似特征与技能的结合体

  对象:特征与技能的结合体

  现实中先有对象,然后才有类,在程序中需先定义类,然后才产生对象。

  4.类的属性

  两种属性:数据属性、函数属性

  类的数据属性是所有对象共享的,类的函数属性是绑定给对象用的

  类中定义的函数(没有被任何装饰器装饰的)是类的函数属性,类可以使用,但必须遵循函数的参数规则,有几个参数需要传几个参数。

  类中定义的函数(没有被任何装饰器装饰的),其实主要是给对象使用的,而且是绑定到对象的,虽然所有对象指向的都是相同的功能,但是绑定到不同的对象就是不同的绑定方法

  强调:绑定到对象的方法的特殊之处在于,绑定给谁就由谁来调用,谁来调用,就会将‘谁’本身当做第一个参数传给方法,即自动传值(方法__init__也是一样的道理)

  注意:python中一切皆为对象,且python3中类与类型是一个概念,类型就是类

二.面向对象的组合用法

  1.组合:在一个类中以另外一个类的对象作为数据属性,称为类的组合、

class Weapon:
#     def prick(self, obj):  # 这是该装备的主动技能,扎死对方
#         obj.life_value -= 500  # 假设攻击力是500
# class Person:  # 定义一个人类
#     role = 'person'  # 人的角色属性都是人
#     def __init__(self, name,life_value):
#         self.name = name  # 每一个角色都有自己的昵称;
#         self.life_value = life_value #生命值
#         self.weapon = Weapon()  # 给角色绑定一个武器;
# alex = Person('alex',10000)
# egon = Person('egon',5000)
# egon.weapon.prick(alex)
# print(alex.life_value)
# egon.weapon.prick(alex)
# print(alex.life_value)

  组合例子:(圆环的面积和周长)

from math import pi

class Circle:
    '''
    定义了一个圆形类;
    提供计算面积(area)和周长(perimeter)的方法
    '''
    def __init__(self,radius):
        self.radius = radius

    def area(self):
         return pi * self.radius * self.radius

    def perimeter(self):
        return 2 * pi *self.radius


circle =  Circle(10) #实例化一个圆
area1 = circle.area() #计算圆面积
per1 = circle.perimeter() #计算圆周长
print(area1,per1) #打印圆面积和周长

class Ring:
    '''
    定义了一个圆环类
    提供圆环的面积和周长的方法
    '''
    def __init__(self,radius_outside,radius_inside):
        self.outsid_circle = Circle(radius_outside)
        self.inside_circle = Circle(radius_inside)

    def area(self):
        return self.outsid_circle.area() - self.inside_circle.area()

    def perimeter(self):
        return  self.outsid_circle.perimeter() + self.inside_circle.perimeter()

ring = Ring(10,5) #实例化一个环形
print(ring.perimeter()) #计算环形的周长
print(ring.area()) #计算环形的面积

  类的组合本质:在一个类中使用另一个类的属性和方法,当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好

原文地址:https://www.cnblogs.com/sxh-myblogs/p/7339964.html