Python面向对象基础:如何定义类与创建对象

洛溪
洛溪
发布时间:2026-10-12 | 2人浏览过
原创

Python面向对象编程的核心在于将数据与行为封装至类中。本文详细演示如何通过class语法定义类、实例化对象,并规范使用self参数与__init__构造函数。同时对比实例方法、类方法与静态方法的适用场景,提供类属性共享机制的实际操作代码,助您快速搭建面向对象程序结构。

理解类的定义与对象创建

第1步:编写类的结构框架

目的:建立包含行为逻辑的代码模板。入口为代码编辑器或交互环境。动作:使用 class 关键字声明类名(遵循大驼峰命名法),通过缩进块定义内部函数。重要参数:方法定义的第一个参数必须为 self,代表当前实例的引用。完成状态:控制台无语法报错,类结构已成功加载至内存。

# 用class定义类名
class Student:
    """这是一个学生类"""
    def 方法1(self, 参数列表):
        pass
    def 方法2(self, 参数列表):
        pass

第2步:通过类实例化对象

目的:根据模板生成具有独立存储空间的数据实体。入口为已定义的类模块。动作:执行 对象名 = 类名() 语法创建实例,并通过 对象名.方法名() 调用封装逻辑。重要参数:调用时省略 self 参数,由解释器自动关联当前实例。完成状态:成功打印方法内的预定义输出,证明对象已就绪并可响应行为请求。

# 定义猫类
class Cat:
    def eat(self):   # 定义方法
        print("小猫爱吃鱼")
    def drink(self):
        print("小猫要喝水")

tom = Cat()        # 创建类的对象
tom.eat()          # 对象调用类中封装的方法
tom.drink()        # 对象调用类中封装的方法

使用 self 在方法内部输出每一只猫的名字:

  1. 在类封装的方法内部,self 就表示当前调用方法的对象自己。
  2. 调用方法时,程序员不需要传递 self 参数。
  3. 在方法内部可以通过 self.属性名 访问对象属性,或通过 self.方法名() 调用其他对象方法。
class Cat:
    def eat(self):
        print("%s 爱吃鱼" % self.name)

tom = Cat()
tom.name = "Tom"
tom.eat()       # 输出: Tom 爱吃鱼

lazy_cat = Cat()
lazy_cat.name = "大懒猫"
lazy_cat.eat()  # 输出: 大懒猫 爱吃鱼

在日常开发中,不推荐在类的外部给对象增加属性。如果在运行时没有找到属性,程序就会报错。对象应该包含有哪些属性,应该封装在类的内部。

第3步:使用 __init__ 规范属性初始化

目的:确保对象在创建瞬间即携带必要字段,杜绝运行期动态补全导致的属性缺失异常。入口:__init__ 魔法方法内部。动作:在类定义中声明该方法,接收 self 及业务所需参数,使用 self.属性 = 参数 进行绑定。重要参数:构造函数接收的入参决定了实例的初始形态。完成状态:实例化调用后,对象立即具备指定名称与数值的属性,且支持后续方法访问。

class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        print("我的名字叫", name, "今年岁数是", age)

xiaoming = Student("小明", 20)
xiaohong = Student("小红", 18)

掌握类中的不同方法类型与属性管理

第4步:区分实例方法、类方法与静态方法

目的:根据数据访问层级选择恰当的方法修饰符,优化代码组织。入口:类体内部。动作:实例方法默认绑定 self;类方法添加 @classmethod 装饰器并将首参设为 cls;静态方法添加 @staticmethod 装饰器且不接收隐式参数。重要参数:装饰器类型决定方法调用时的上下文。完成状态:通过类名或实例均可正确执行对应方法,无类型错误抛出。

class Student:
    native_place = "吉林"  # 类属性
    
    def __init__(self, name, age):   # name,age为实例属性
        self.name = name
        self.age = age
        
    def eat(self):                   # 实例方法
        print("我正在吃饭...")
    
    def info(self):
        print("我的名字叫:", self.name, "年龄是:", self.age)
        
    @classmethod
    def cm(cls):
        print("类方法")
        
    @staticmethod
    def sm():
        print("静态方法")

stu1 = Student("张三", 20)
stu1.info()
stu1.eat()
print(stu1)

print(Student.native_place)
Student.cm()
Student.sm()

第5步:访问与修改共享的类属性

目的:管理同类所有实例共用的公共配置数据。入口:类定义体外部的变量区。动作:直接在类级别声明变量作为类属性,读取时可通过类名 类名.属性 或实例 实例.属性 访问。若需修改类属性,建议仅通过类名赋值以避免意外覆盖。重要参数:类属性变更将实时同步至所有现存及新建实例。完成状态:多实例输出一致的属性值,验证了共享机制生效。

stu3 = Student("张三", 20)
stu4 = Student("李四", 30)
print(stu3.native_place)  # 吉林
print(stu4.native_place)  # 吉林

# 修改类属性
Student.native_place = "天津"
print(stu3.native_place)  # 天津
print(stu4.native_place)  # 天津

总结

以上就是Python面向对象基础中定义类与创建对象的详细内容,更多关于Python类与对象进阶实战的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表