面向对象编程

面向对象编程

什么是面向对象?

面向对象是一门编程思想

对象在这里指的可不是你的男女朋友

在这里对象指的是特征与技能的结合体

基于改编成思想就好比在创造世界,一种上帝式的思维方式

注意:要将自己当作一个上帝,想创造什么就创造什么,为所欲为

该编成思想的优缺点是:

优点:

可扩展性高

缺点:

编写程序的复杂度比面向过程高

什么是对象?

在说这个之前我们要知道什么是类

类指的是类型,类别

在程序中,必须现有类,通过调用类,产生对象

对象指的是特征与技能的结合体,类指的是对象之间相同的特征与技能的结合体

定义类的语法

class 类的名字 :

​ —对象之间相同的特征

​ —技能

# 定义老男孩学生类,命名规范,驼峰命名法
class OldboyStudent:
    # 都在老男孩学习,就是对象之间相同的特征
    school = "oldboy"
    # 注意:在类内部定义函数,会有一个默认参数,self
    # 学生的学习技能
    def learn(self):
        print("learning....")
# 调用类时,产生对象obj
# 对象调用方法时: 会将对象当做第一个参数传入方法中。
obj = OldboyStudent()
'''
由对象来调用类内部的函数,称之为对象的绑定方法。
    对象的绑定方法特殊之处: 会将对象当做第一个参数传给该方法。
'''

上面说的都是对象之间相同的特征

下面我们来说一下,如何为对象传入独有的特征

使用__ init __()方法

在这里要注意:

由对象来调用类内部的函数,称之为对象的绑定方法

看到self就应该知道是对象本身

init()方法是在类内部定义的方法,在调用类时触发,会自动将对像当做第一个参数传入,括号内的所有参数会一并传给init()

class OldboyStudent:
    school = "oldboy"
    # 为对象传入独有的name,age,sex
    # 注意: 看到self就应该知道是对象本身
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex
    def learn(self):
        print("learning....")
# 为obj对象独有特征传入参数
obj = OldboyStudent("kang", 18, "male")
print(obj1.name, obj1.age, obj1.sex)
# 打印结果
# kang 18 male

实现类或对象属性操作:增、删、改、查

class OldboyStudent:
    school = "oldboy"
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex
    def learn(self):
        print("learning....")
# 调用类时,产生对象obj1
# 类名+() 产生对象
obj1 = OldboyStudent("kang", 18, "male")
print(obj1.name, obj1.age, obj1.sex)
print(obj1.school)
# 实现类或对象属性操作:增、删、改、查
# 增
obj1.girlfind = "zhao"
print(obj1.girlfind)
# 删
del obj1.sex
# print(obj1.sex)     # 已经删除掉了,现在再打印就会报错
# 改
obj1.school = "old"
print(obj1.school)
# 查
print(obj1.age)     # 查看obj1对象中的年龄

对象名字的查找顺序

1、对象.属性会先找对象自己的

2、若对象没有,会找类的

3、若类没有,就会报错

扩展练习:人狗大作战

'''
需求: 有一个人对象,狗对象,人狗互咬。

- 对象人1:
    - 特征:
        - 生命
        - 名字: name = '张全蛋'
        - 攻击力: arg

    - 技能:
        - 咬:bite
狗对象1:
    - 特征:
        - 生命: 200
        - 名字: name = '大黑'
        - 品种: dog_type = '黑贝'
        - 攻击力: arg

    - 技能:
        - 咬:bite
        
'''
# 人类
class Pepole:

    def __init__(self, name, hp, arg):
        self.name = name
        self.hp = hp
        self.arg = arg

    # 人调用bite时,传入狗对象
    def bite(self, dog_obj):
        print(f"人:[{self.name}]开始咬狗:[{dog_obj.name}]!")

        # 减掉狗的生命值,值为人的攻击力
        dog_obj.hp -= self.arg
        print(f"狗的血量减少[{self.arg}]还剩血量[{dog_obj.hp}]")

        if dog_obj.hp <= 0:
            print(f"狗[{dog_obj.name}]已经挂了")
            return True


# 狗类
class Dog:

    def __init__(self, name, hp, dog_type, arg):
        self.name = name
        self.hp = hp
        self.dog_type = dog_type
        self.arg = arg

    # 狗对象调用bite时,传入人对象
    def bite(self, p_obj):
        print(f"狗:[{self.name}]开始咬人:[{p_obj.name}]!")

        # 减掉人的生命值,值为狗的攻击力
        p_obj.hp -= self.arg
        print(f"人的生命值减掉[{self.arg}],还剩血量[{p_obj.hp}]")

        if p_obj.hp <= 0:
            print(f"人[{p_obj.name}]已经挂了")
            return True


p1 = Pepole("张全蛋", 2000, 50)
d1 = Dog("大黑", 200, "黑贝", 350)


import time


# 人狗开始互咬!
while True:
    res1 = d1.bite(p1)
    if res1:
        break
    time.sleep(2)
    res2 = p1.bite(d1)
    if res2:
        break
    time.sleep(2)
# 打印结果
# 狗:[大黑]开始咬人:[张全蛋]!
# 人的生命值减掉[350],还剩血量[1650]
# 人:[张全蛋]开始咬狗:[大黑]!
# 狗的血量减少[50]还剩血量[150]
# 狗:[大黑]开始咬人:[张全蛋]!
# 人的生命值减掉[350],还剩血量[1300]
# 人:[张全蛋]开始咬狗:[大黑]!
# 狗的血量减少[50]还剩血量[100]
# 狗:[大黑]开始咬人:[张全蛋]!
# 人的生命值减掉[350],还剩血量[950]
# 人:[张全蛋]开始咬狗:[大黑]!
# 狗的血量减少[50]还剩血量[50]
# 狗:[大黑]开始咬人:[张全蛋]!
# 人的生命值减掉[350],还剩血量[600]
# 人:[张全蛋]开始咬狗:[大黑]!
# 狗的血量减少[50]还剩血量[0]
# 狗[大黑]已经挂了
调用类产生对象的过程成为实例化,对象就是类的实例

一切皆对象: 在python3中,类即类型。

原文地址:https://www.cnblogs.com/aheng/p/11929225.html