Python面向对象编程实战指南

Python学习之Day05:定制数据对象与面向对象编程

面向对象编程基础

面向对象编程(OOP)的核心思想是将数据与操作数据的方法封装为对象。Python通过类和对象实现OOP,类定义对象的属性和方法,对象是类的实例。

定义类的语法如下:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def greet(self):
        return f"Hello, my name is {self.name}"
  • __init__是构造函数,用于初始化对象属性。
  • self表示类的实例,通过它访问属性和方法。

定制数据对象

通过类可以创建定制化的数据对象,例如表示二维坐标的点:

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def distance_to_origin(self):
        return (self.x**2 + self.y**2)**0.5

调用方式:

p = Point(3, 4)
print(p.distance_to_origin())  # 输出5.0

类属性与实例属性

  • 类属性属于类本身,所有实例共享。
  • 实例属性属于单个对象。
class Dog:
    species = "Canis familiaris"  # 类属性

    def __init__(self, name):
        self.name = name  # 实例属性

继承与多态

继承允许子类复用父类的功能并扩展:

class Animal:
    def speak(self):
        raise NotImplementedError("Subclass must implement")

class Dog(Animal):
    def speak(self):
        return "Woof!"

多态指不同子类对同一方法的不同实现。

魔术方法定制对象行为

通过__str____eq__等魔术方法自定义对象行为:

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __str__(self):
        return f"Point({self.x}, {self.y})"

    def __eq__(self, other):
        return self.x == other.x and self.y == other.y

封装与属性控制

使用@property装饰器控制属性访问:

class Temperature:
    def __init__(self, celsius):
        self._celsius = celsius

    @property
    def celsius(self):
        return self._celsius

    @celsius.setter
    def celsius(self, value):
        if value < -273.15:
            raise ValueError("Temperature below absolute zero")
        self._celsius = value

应用示例:学生管理系统

结合OOP实现简单学生管理:

class Student:
    def __init__(self, id, name, score):
        self.id = id
        self.name = name
        self.score = score

    def __str__(self):
        return f"ID: {self.id}, Name: {self.name}, Score: {self.score}"

class StudentManager:
    def __init__(self):
        self.students = []

    def add_student(self, student):
        self.students.append(student)

通过以上内容,可以系统掌握Python中面向对象编程的核心概念与实践方法。

BbS.okane326.info/PoSt/1121_209265.HtM
BbS.okane327.info/PoSt/1121_112650.HtM
BbS.okane328.info/PoSt/1121_627039.HtM
BbS.okane329.info/PoSt/1121_427297.HtM
BbS.okane330.info/PoSt/1121_139383.HtM
BbS.okane331.info/PoSt/1121_197514.HtM
BbS.okane332.info/PoSt/1121_879055.HtM
BbS.okane333.info/PoSt/1121_808053.HtM
BbS.okane334.info/PoSt/1121_926307.HtM
BbS.okane335.info/PoSt/1121_164612.HtM
BbS.okane326.info/PoSt/1121_050120.HtM
BbS.okane327.info/PoSt/1121_208650.HtM
BbS.okane328.info/PoSt/1121_213100.HtM
BbS.okane329.info/PoSt/1121_124318.HtM
BbS.okane330.info/PoSt/1121_952763.HtM
BbS.okane331.info/PoSt/1121_906710.HtM
BbS.okane332.info/PoSt/1121_759839.HtM
BbS.okane333.info/PoSt/1121_053363.HtM
BbS.okane334.info/PoSt/1121_439995.HtM
BbS.okane335.info/PoSt/1121_731828.HtM
BbS.okane326.info/PoSt/1121_728928.HtM
BbS.okane327.info/PoSt/1121_123355.HtM
BbS.okane328.info/PoSt/1121_334534.HtM
BbS.okane329.info/PoSt/1121_522688.HtM
BbS.okane330.info/PoSt/1121_283703.HtM
BbS.okane331.info/PoSt/1121_576869.HtM
BbS.okane332.info/PoSt/1121_704365.HtM
BbS.okane333.info/PoSt/1121_610319.HtM
BbS.okane334.info/PoSt/1121_694210.HtM
BbS.okane335.info/PoSt/1121_305444.HtM
BbS.okane326.info/PoSt/1121_816637.HtM
BbS.okane327.info/PoSt/1121_671467.HtM
BbS.okane328.info/PoSt/1121_403978.HtM
BbS.okane329.info/PoSt/1121_990996.HtM
BbS.okane330.info/PoSt/1121_908158.HtM
BbS.okane331.info/PoSt/1121_462120.HtM
BbS.okane332.info/PoSt/1121_252403.HtM
BbS.okane333.info/PoSt/1121_590934.HtM
BbS.okane334.info/PoSt/1121_289884.HtM
BbS.okane335.info/PoSt/1121_444348.HtM
BbS.okane326.info/PoSt/1121_624568.HtM
BbS.okane327.info/PoSt/1121_692512.HtM
BbS.okane328.info/PoSt/1121_368501.HtM
BbS.okane329.info/PoSt/1121_269691.HtM
BbS.okane330.info/PoSt/1121_665373.HtM
BbS.okane331.info/PoSt/1121_176333.HtM
BbS.okane332.info/PoSt/1121_592158.HtM
BbS.okane333.info/PoSt/1121_062610.HtM
BbS.okane334.info/PoSt/1121_811741.HtM
BbS.okane335.info/PoSt/1121_748819.HtM
BbS.okane326.info/PoSt/1121_650974.HtM
BbS.okane327.info/PoSt/1121_567970.HtM
BbS.okane328.info/PoSt/1121_283038.HtM
BbS.okane329.info/PoSt/1121_051732.HtM
BbS.okane330.info/PoSt/1121_262754.HtM
BbS.okane331.info/PoSt/1121_332280.HtM
BbS.okane332.info/PoSt/1121_889286.HtM
BbS.okane333.info/PoSt/1121_788370.HtM
BbS.okane334.info/PoSt/1121_934614.HtM
BbS.okane335.info/PoSt/1121_210656.HtM
BbS.okane336.info/PoSt/1121_836137.HtM
BbS.okane337.info/PoSt/1121_724064.HtM
BbS.okane338.info/PoSt/1121_179326.HtM
BbS.okane339.info/PoSt/1121_748533.HtM
BbS.okane340.info/PoSt/1121_791342.HtM
BbS.okane341.info/PoSt/1121_859229.HtM
BbS.okane342.info/PoSt/1121_110871.HtM
BbS.okane343.info/PoSt/1121_466961.HtM
BbS.okane344.info/PoSt/1121_238643.HtM
BbS.okane345.info/PoSt/1121_637976.HtM
BbS.okane336.info/PoSt/1121_070520.HtM
BbS.okane337.info/PoSt/1121_967314.HtM
BbS.okane338.info/PoSt/1121_782691.HtM
BbS.okane339.info/PoSt/1121_686580.HtM
BbS.okane340.info/PoSt/1121_296235.HtM
BbS.okane341.info/PoSt/1121_098579.HtM
BbS.okane342.info/PoSt/1121_762016.HtM
BbS.okane343.info/PoSt/1121_518760.HtM
BbS.okane344.info/PoSt/1121_640784.HtM
BbS.okane345.info/PoSt/1121_979977.HtM

#牛客AI配图神器#

全部评论

相关推荐

面试官是真的很帅,真的很好。鼠鼠太久没有复习巩固自己的八股了,然后项目也没及时巩固。面试官友好面了50分钟,体验非常好,最后面试官也给鼠鼠很好的建议。只怪鼠鼠学而不精了也感谢哈啰给学院本的面试机会!回去老实啃基础了后端开发面试核心问题汇总(按模块分类)(一)个人经历与项目类(二)Java&nbsp;核心基础类Object&nbsp;的&nbsp;wait&nbsp;()&nbsp;方法与&nbsp;Thread&nbsp;的&nbsp;sleep&nbsp;()&nbsp;方法的区别?常用集合框架(ArrayList、LinkedList)的底层原理、优缺点、时间复杂度对比?读多写少场景下,应选择&nbsp;ArrayList&nbsp;还是&nbsp;LinkedList?HashMap&nbsp;的底层原理(JDK1.8&nbsp;后)?何时从链表转为红黑树?HashMap&nbsp;为何线程不安全?ConcurrentHashMap&nbsp;为何线程安全?线程的核心参数有哪些?volatile&nbsp;关键字的作用?synchronized&nbsp;关键字的作用?多线程并发访问时,如何保证数据安全?JVM&nbsp;内存模型如何划分?(新生代、老年代、永久代&nbsp;/&nbsp;元空间)垃圾回收算法有哪些?(标记&nbsp;-&nbsp;清除、复制、标记&nbsp;-&nbsp;整理、分代回收)如何判定一个对象是否存活?(引用计数法、可达性分析)(三)框架与中间件类Spring&nbsp;与&nbsp;Spring&nbsp;Boot&nbsp;的区别?项目中是否用到&nbsp;Spring&nbsp;的特性(如&nbsp;AOP)?具体场景是什么?Redis&nbsp;支持哪些数据类型?缓存穿透、缓存击穿、缓存雪崩的定义及解决方案?RabbitMQ&nbsp;的消费方式有哪些?(如推模式、拉模式、订阅模式等)(四)场景设计类用户头像接口不稳定(有时加载失败),如何保证前端用户体验?(五)求职与公司相关类对哈啰公司业务方向的了解?部门主要业务方向是什么?公司人员架构&nbsp;/&nbsp;规模?面试后续流程是什么?
查看21道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务