python 面向对象编程

面向对象编程(Object Orient Programming,简称 OOP),是一种编程方式,这种编程方式需要使用"对象"来实现。

对象具有以下特征:

1、世间万物皆对象
某个具体领域也是由对象组成,
例如:
在学校领域,对象包括 学生、教师、课程、成绩等
在银行领域,对象包括银行账户、工作人员、支票、现金和验钞机等
因此,问题领域中的概念和实体都可以被抽象为 对象。

2、每个对象都是唯一的
对象的唯一性来自于真实世界中事物的唯一性,
世界上不存在两片一模一样的叶子,因此在软件系统中对象也具有唯一性,
例如:学生小王、学生小李、小王的成绩单以及小李的成绩单,这些对象都是唯一的。

3、对象具有属性和行为
例如:小李,男,38岁,身高159,会唱歌、可单手开保时捷,
小李的属性是:姓名、性别、身高,行为是:唱歌、单手开保时捷


在比如:手机,品牌华为,价格5999,黑色,能够拍照、打电话以及看视频,
手机的属性包括品牌、价格和颜色,行为包括拍照、打电话和看视频,
对象的行为包括具有的功能及具体的实现。

4、对象具有状态
状态是指某个瞬间对象的各个属性的取值,
对象的某些行为往往会改变对象自身的状态,即属性的取值,
例如:小李体重200斤,经过减肥后,体重变为100斤

5、对象分为 类对象 和 实例对象 两大类
类对象 是具有相同属性和行为的实例对象的抽象,
类对象 就是实例对象的模板,实例对象是由类对象创建出来的。


例子:制作月饼,需要 月饼模具 以及 材料
月饼模具 就是 类对象(实例对象的模板)
月饼 就是 实例对象(由类对象创建出来),即 月饼 由 月饼模具 创建出来。


面向对象编程的大体步骤:

1、抽象出类对象
2、抽象出类对象属性
3、抽象出类对象的行为(方法)
4、根据类对象创建实例对象
5、通过实例对象访问属性的方法



定义类对象以及创建实例对象

一、定义类对象

定义类对象的语法格式:

class 类名(object):
    属性和方法

1.类名由一个或多个单词组成,一般采取驼峰式写法,每个字母的首字母大写,其余的小写,例如: SomeClass
2.(object)表示该类对象继承来自Python内置的类对象object, Python中所有的类对象都继承自一个统一的
基类:object

class SomeClass(object):
    pass


二、创建实例对象

根据类对象创建实例对象的语法格式:类名([实参])

为了在创建实例对象后对其进行初始化,可以在类对象中定义一个名为 __init__ (以双下划线开头和结尾)的特殊方法,
当创建实例对象后就会自动调用特殊方法 __init__。

方法就是定义在类对象中的函数,方法与函数的区别在于:
1、定义方法时,方法的第一个形参表示调用该方法的实例对象,第一形参的名称通常是 self ,也可以是其他名称;
2、调用方法时,系统自动将调用该方法的实例对象作为实参传递给第一形参,第一实参会传递给第二形参,
第二实参会传给第三形参,依此类推。
# 创建类对象
class SomeClass(object):
    pass

# 创建实例对象,类名([实参])
sc = SomeClass()
print(sc)
# <__main__.SomeClass object at 0x000000000282FC48>
# 类对象 SomeClass 存在方十六进制的0x000000000282FC48 内存地址中



# 创建类对象
class SomePeople(object):
    def __init__(self, age, sex):
        self.age = age
        self.sex = sex

# 创建实例对象,类名([实参])
test = SomePeople(18, "男")

print(test)



练习1

class Count():
    # 定义加法
    def add(self, a, b):
        return a + b

    # 定义减法
    def acc(self, a, b):
        return a - b

    # 加法和减法相乘
    def aee(self, a, b):
        # 这里的 self 就是类本身的实例参数
        return self.add(a, b) * self.acc(a, b)


if __name__ == '__main__':
    # 实例化
    t = Count()
    # print(t.acc(3, 8))

    print(t.aee(7, 8)) # -15


练习2

# 定义类
class ToastBeef():
    def __init__(self):
        # 被烤的时间
        self.cook_time = 0
        # 牛肉的初始状态,生的
        self.cook_static = '生的'
        # 调料列表,定义为空,代表开始的原味的
        self.condiments = []

    def cook(self, time):
        """烤牛肉的方法"""
        self.cook_time += time
        if 0 <= self.cook_time < 4:
            self.cook_static = '三分熟'
        elif 4 <= self.cook_time < 5:
            self.cook_static = '五分熟'
        elif 5 <= self.cook_time < 8:
            self.cook_static = '7分熟'
        elif self.cook_time >= 8:
            self.cook_static = '熟透了'

    def add_condiments(self, condiment):
        """添加调料"""
        self.condiments.append(condiment)

    def __str__(self):
        # 当使用print输出对象的时候,默认打印对象的内存地址。如果类定义了__str__方法,
        # 那么就会打印从在这个方法中 return 的数据。
        return f'牛肉烤了{self.cook_time}分钟, 状态是{self.cook_static}, 添加的调料有{self.condiments}'


beef = ToastBeef()
# print(beef)

beef.cook(3)
beef.add_condiments('孜然')
print(beef)

# beef.cook(2)
# beef.add_condiments('胡椒粉')
# print(beef)


原文地址:https://www.cnblogs.com/wwho/p/15564094.html