「python」面向对象

「python」面向对象
摘要由CSDN通过智能技术生成

面向对象引入

# 用所学知识实现人狗大战
person1 = {
    'name': 'jason',
    'atk': 100,
    'lif': 100000
}
dog1 = {
    'name': '沙漠死神',
    'atk': 400,
    'lif': 3500
}

# 人攻击狗
dog1['lif'] -= person1['atk']
# 狗攻击人
person1['lif'] -= dog1['atk']

# 如果要创建多个人或狗 代码冗余量太大 所以要封装为函数 并且攻击也可以封装成函数
def get_person(name, atk, lif):
    person = {
        'name': name,
        'atk': atk,
        'lif': lif
    }
    return person

def get_dog(name, atk, lif):
    dog = {
        'name': name,
        'atk': atk,
        'lif': lif
    }
    return dog

def person_atk(person, dog):
    dog['lif'] -= person['atk']

def dog_atk(dog, person):
    person['lif'] -= dog['atk']

代码优化

# 代码缺陷:人可以调用dog_atk 狗可以调用person_atk
# 优化:将功能嵌套在使用者身上

def get_person(name, atk, lif):
    def person_atk(person, dog):
        dog['lif'] -= person['atk']
    person = {
        'name': name,
        'atk': atk,
        'lif': lif,
        'person_atk': person_atk  # 将功能函数添加到字典中
    }
    return person

def get_dog(name, atk, lif):
    def get_dog(dog, person):
        person['lif'] -= dog['atk']
    dog = {
        'name': name,
        'atk': atk,
        'lif': lif,
        'dog_atk': dog_atk  # 将功能函数添加到字典中
    }
    return dog


p1 = get_person('jason', 45, 736)
d1 = get_dog('沙漠死神', 36, 872)
p1.get('person_atk')(p1, d1)  # 这样人就只能调用人的攻击

引入总结

将人的数据跟人的功能绑定到一起
    只有人可以调用人的功能
将狗的数据跟狗的功能绑定到一起
    只有狗可以调用狗的功能
将数据与功能绑定到一起的操作起名为:'面向对象编程'

本质:将特定的数据与特定的功能绑定到一起 将来只能彼此相互使用

编程思想

面向过程思想
    迄今为止 我们所编写的代码都是面向过程思想
    过程:指的是流程 根据功能 一步一步的编写下来
面向对象思想
    核心为 对象 二字
        对象是一个 功能与数据 的结合体
    一般创建了一个对象 就可以将其放在一边不管

"""
面向过程编程相当于让你给出一个问题的具体解决方案
面向对象编程相当于让你创造出一些事物之后不用你管
"""

上述两种编程思想没有优劣之分 仅仅是使用场景不同
甚至很多时候是两者混合使用

对象与类的概念

对象是 功能与数据 的结合体
而类是 多个拥有相同数据和功能的对象 的结合体
类用于产生对象
但对象才是真正的核心

对象与类的创建

先有类 再有对象

# 关键字 class

class Student:
    # 学生类的公共数据
    # 学生类的公共方法

"""
1.class是定义类的关键字
2.People是类的名字
    类名的命名跟变量名一致 并且推荐首字母大写(为了更好的区分)
3.类体代码
    公共的数据\公共的方法
ps:类体代码在类定义阶段就会执行!!!
"""

对象独有的数据

class Student:
    school = '清华大学'

stu1 = Student()
# 添加独有的数据
stu1.name = 'jason'
stu1.age = 18
stu1.gender = 'male'
print(stu1.__dict__)  # {'name': 'jason', 'age': 18, 'gender': 'male'}

# 要给多个学生对象添加数据 代码冗余 封装函数
def init(stu_obj, name, age, gender):
    stu_obj.name = name
    stu_obj.age = age
    stu_obj.gender = gender

stu2 = Student()
init(stu2, 'kevin', 28, 'female')
print(stu2.__dict__)  # {'name': 'kevin', 'age': 28, 'gender': 'female'}

# 当有其他类的时候 想init只给学生类用 封装到类中
class Student:
    school = '清华大学'

    def init(stu_obj, name, age, gender):  # 这里的stu_obj变色了 发现无论怎么修改 都和其他不一样
        stu_obj.name = name
        stu_obj.age = age
        stu_obj.gender = gender

    # 在类中的函数 默认传输的第一个参数为对象本身 会自动传输

stu1 = Student()
print(stu1.__dict__)  # {}
stu1.init('jason', 18, 'male')
print(stu1.__dict__)  # {'name': 'jason', 'age': 18, 'gender': 'male'}

# 类提供了一种方法 __init__ 在创建类的时候自动初始化数据
class Student:
    school = '清华大学'

    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender

stu1 = Student('jason', 18, 'male')  # 创建对象时就要传参
print(stu1.__dict__)  # {'name': 'jason', 'age': 18, 'gender': 'male'}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python面向对象编程是一种编程范式,它将程序组织成对象的集合,每个对象都有自己的属性和方法。在Python中,可以通过定义类来创建对象,并通过实例化类来创建具体的对象。引用[1]中的代码示例展示了一个Animal类,其中包含了初始化方法和一个__str__方法来返回对象的描述信息。通过这个类,可以创建Animal对象,并通过print函数输出对象。引用中的代码示例展示了如何使用@property装饰器来定义类的属性和属性的访问方法。通过这种方式,可以在访问属性时像访问普通属性一样使用点号,而不需要使用方法调用的方式。引用中的代码示例展示了多态在Python中的应用。多态是面向对象编程的重要概念,它允许不同的对象以相同的方式对外部访问,但具体的实现可能不同。在这个示例中,father、son和daughter类都继承了father类,并重写了tell方法。通过调用不同的对象的tell方法,可以看到不同的输出结果。总之,Python面向对象编程是一种灵活且强大的编程方式,它允许开发者以对象为中心来思考和组织代码,提高了代码的可读性和可维护性。通过定义类、创建对象和使用类的属性和方法,可以实现丰富多样的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Python面向对象(全套)](https://blog.csdn.net/Thewei666/article/details/126652501)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值