Files
PythonLearn/03_面向对象/3_1_Python与Java的类和对象/class_object_comparison.py

64 lines
2.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 第 3-1 课完整示例Python 与 Java 的类和对象
#
# 本示例不重复讲解通用的面向对象概念,而是集中展示 Python 与 Java 的写法差异。
# 运行程序时,每一段输出都会再次提醒对应差异,便于只看代码和结果也能掌握重点。
class Agent:
"""表示一个简单的 Agent并演示 Python 类的核心语法。"""
# Python 的类属性类似 Java 的 static 字段,由所有实例共同访问。
platform = "Codex"
def __init__(self, name: str, model: str = "gpt-5") -> None:
"""初始化实例属性__init__ 的作用接近 Java 构造器,但它不是类名同名方法。"""
# Python 通常直接在 __init__ 中创建实例属性,不需要提前声明字段。
# self 类似 Java 的 this但在实例方法定义中必须显式写出来。
self.name = name
self.model = model
def describe(self) -> str:
"""返回当前对象的说明文字。"""
return f"{self.name} 使用 {self.model},运行平台:{self.platform}"
@classmethod
def from_config(cls, config: dict[str, str]) -> "Agent":
"""通过配置创建对象cls 指向当前类,作用类似可继承的命名工厂。"""
return cls(config["name"], config.get("model", "gpt-5"))
@staticmethod
def is_valid_name(name: str) -> bool:
"""校验名称;该方法不需要访问某个对象或当前类。"""
return bool(name.strip())
def main() -> None:
"""创建对象并输出 Python 与 Java 的关键差异。"""
code_agent = Agent("代码助手", "gpt-5.2")
review_agent = Agent.from_config({"name": "审查助手"})
print("差异 1Python 使用 __init__ 初始化对象,不写与类同名的构造器。")
print(code_agent.describe())
print()
print("差异 2self 类似 Java 的 this但定义实例方法时必须显式声明。")
print(f"通过对象访问实例属性:{code_agent.name}")
print()
print("差异 3实例属性通常在运行时创建不需要像 Java 字段那样预先声明。")
code_agent.status = "工作中"
print(f"动态添加的 status{code_agent.status}")
print()
print("差异 4类属性类似 static 字段,但也能通过实例读取。")
print(f"通过类读取:{Agent.platform};通过实例读取:{review_agent.platform}")
print()
print("差异 5Python 不使用 new直接调用类即可创建对象。")
print(review_agent.describe())
print(f"名称是否合法:{Agent.is_valid_name(review_agent.name)}")
if __name__ == "__main__":
main()