Python中定义类和对象的核心是通过class关键字创建类,并使用类实例化对象。类封装数据(属性)和行为(方法),对象则是类的具体实例,通过调用类中定义的方法或访问属性实现功能。
一、定义简单的类在Python中,使用class关键字定义类,类名通常采用大驼峰命名法(每个单词首字母大写)。类中可以定义方法,方法的第一个参数必须是self(表示对象自身),但在调用时无需显式传递。
- 语法格式:class 类名: def 方法1(self, 参数列表): pass def 方法2(self, 参数列表): pass
- 示例:定义一个空的Student类。class Student: pass
二、创建对象类定义完成后,通过类名加括号实例化对象。对象是类的具体实例,每个对象拥有独立的内存空间。
- 语法格式:对象变量名 = 类名()
- 示例:定义Cat类并创建对象。class Cat: def eat(self): print("小猫爱吃鱼") def drink(self): print("小猫要喝水")tom = Cat() # 创建对象tom.eat() # 调用方法tom.drink()
三、self的作用- 表示当前对象:在方法内部,self指向调用该方法的对象。通过self可以访问对象的属性或调用其他方法。
- 自动传递:调用方法时,Python会自动将对象作为self参数传入,无需手动传递。
- 示例:通过self输出猫的名字。class Cat: def eat(self): print(f"{self.name} 爱吃鱼") # 通过self访问属性tom = Cat()tom.name = "Tom" # 动态添加属性(不推荐)tom.eat()
四、初始化方法__init__- 作用:在创建对象时自动调用,用于初始化对象的属性。
- 参数:至少包含self,还可定义其他参数(如name、age)。
- 示例:定义Student类并初始化属性。class Student: def __init__(self, name, age): self.name = name # 实例属性 self.age = age print(f"我的名字叫{name},今年{age}岁")xiaoming = Student("小明", 20) # 创建对象时传递参数
五、类属性、类方法与静态方法类属性
定义在类中、方法外的变量,被所有对象共享。
通过类名或对象访问,修改类属性会影响所有对象。
示例:
class Student: native_place = "吉林" # 类属性print(Student.native_place) # 输出: 吉林Student.native_place = "天津" # 修改类属性print(Student.native_place) # 输出: 天津类方法
使用@classmethod装饰,第一个参数为cls(表示类本身)。
通常用于操作类属性或创建对象的不同方式。
示例:
class Student: @classmethod def cm(cls): print("这是类方法")Student.cm() # 输出: 这是类方法静态方法
使用@staticmethod装饰,无self或cls参数。
与类和对象无关,仅逻辑上属于类。
示例:
class Student: @staticmethod def sm(): print("这是静态方法")Student.sm() # 输出: 这是静态方法
六、完整示例class Student: native_place = "吉林" # 类属性 def __init__(self, name, age): self.name = name # 实例属性 self.age = age def eat(self): print(f"{self.name}正在吃饭...") @classmethod def cm(cls): print("类方法") @staticmethod def sm(): print("静态方法")# 创建对象stu1 = Student("张三", 20)stu1.eat() # 输出: 张三正在吃饭...print(stu1.native_place) # 输出: 吉林# 调用类方法和静态方法Student.cm() # 输出: 类方法Student.sm() # 输出: 静态方法七、关键总结- 类是对象的模板,对象是类的实例。
- self是方法的隐式参数,指向当前对象。
- __init__用于初始化对象属性,创建对象时自动调用。
- 类属性被所有对象共享,实例属性仅属于单个对象。
- 类方法和静态方法通过装饰器定义,分别用于操作类和独立逻辑。