python 面向对象

python 中的对象创建方法

python 复制代码
 def __init__(self,name:str,age:int):
        self._name=name
        self._age=age
    def __new__(self,name:str,age:int):
        self.__init__(name,age)
        print("创建对象Student")
    def __init_subclass__(cls, **kwargs):
        print('初始化父类')_
    def __del__(self):
        print("销毁Student对象")

    #对象转字典
    print(Student2.__dict__)
    print(s1.__dict__)

python 中定义私用属性和私用方法

python 复制代码
    def __init__(self,name:str,age:int):
        self._name=name
        self._age=age
python 复制代码
    def __map2__(self):
        m = {}
        m["name"] = self._name
        m["age"] = self._age
        return m
    
    def map(self):
        return self.__map2__()

子类中调用父类的方法

python 复制代码
class JuioriStudent(Student):
    def __init__(self,name:str,age:int,sex:int):
        #super().__init__(name,age)
        Student.__init__(self,name,age)
        self.sex = sex

python 中的static 方法如何定义,适用@staitcmethod

python 复制代码
class A:
    @staticmethod
    def add(a,b):
        return a+b
class B(A):
    @staticmethod
    def add(a,b,c):
        return a + b + c
if __name__ == "__main__":
    print(A.add(1,2))
    print(B.add(1,2,3))

python 同一个类中不能实现和java 一样的根据参数列表的重载

复制代码
  def add(self, a,b):
        return a + b
    def add(self,a,b,c):
        return a + b + c

python 为何是多继承

为了提高代码的服用性,更好运用mixin

多继承最大的理论难题是"菱形继承问题"(Diamond Problem),即当一个类从两个父类继承,而这两个父类又继承自同一个祖父类时,方法调用的顺序会产生歧义25。

Python 并没有回避这个问题,而是通过C3 线性化算法 (C3 Linearization)完美地解决了它。Python 会计算出一个方法解析顺序(MRO, Method Resolution Order),这是一个明确的列表,规定了在查找方法时应该遵循的顺序23。

python 复制代码
class Father:
    def __init__(self):
        print("father")
        self.money = 400
    def getFatherMoney(self):
        return "father money is {} ".format(self.money)


class Monther:
    def __init__(self):
        print("monther")
        self.money = 300
    def getMontherMoney(self):
        return "monther money is {} ".format(self.money)

class Child(Father,Monther):
    def __init__(self):
        super().__init__()
        print("child")
        self.money = 200

    def getMoney(self):
        return "child money is: {} ".format(self.money)
  1. python 中支持重载,重写吗?
  • ‌**重写(Override)**‌:子类可以重新定义从父类继承的方法,以满足自身特定需求。例如,在子类中定义与父类同名的方法。
  • 重载(Overload) ‌:Python 不支持传统意义上的方法重载(即通过参数类型或数量区分多个同名函数),但可以通过默认参数、*args**kwargsfunctools.singledispatch 等方式模拟类似行为。
相关推荐
曲幽19 小时前
FastAPI + PostgreSQL 实战:从入门到不踩坑,一次讲透
python·sql·postgresql·fastapi·web·postgres·db·asyncpg
用户8356290780511 天前
使用 C# 在 Excel 中创建数据透视表
后端·python
码路飞1 天前
FastMCP 实战:一个 .py 文件,给 Claude Code 装上 3 个超实用工具
python·ai编程·mcp
dev派1 天前
AI Agent 系统中的常用 Workflow 模式(2) Evaluator-Optimizer模式
python·langchain
前端付豪1 天前
AI 数学辅导老师项目构想和初始化
前端·后端·python
用户0332126663671 天前
将 PDF 文档转换为图片【Python 教程】
python
悟空爬虫1 天前
UV实战教程,我啥要从Anaconda切换到uv来管理包?
python
dev派1 天前
AI Agent 系统中的常用 Workflow 模式(1)
python·langchain
明月_清风1 天前
从“能用”到“专业”:构建生产级装饰器与三层逻辑拆解
后端·python
曲幽2 天前
数据库实战:FastAPI + SQLAlchemy 2.0 + Alembic 从零搭建,踩坑实录
python·fastapi·web·sqlalchemy·db·asyncio·alembic