面向对象之类、对象的定义
类
定义类语法
1 class ClassName: # 如果写类的f-docstring,就直接写在Class ClassName下一行 2 # 属性 3 attribute1 = value1 4 attribute2 = value2 5 6 # 方法 7 def method1(self, parameters): 8 # 方法实现 9 10 def method2(self, parameters): 11 # 方法实现
其中,类可以包含属性和方法。
- 属性是类的数据成员,用于存储对象的状态和数据。属性可以在类的内部和外部访问。
- 方法是类的函数成员,用于执行特定的操作。方法通常操作对象的属性,并可能返回结果。
在方法的第一个参数中,约定使用self
表示当前对象的引用,可以通过它访问对象的属性和调用其他方法。
创建对象语法
对象名 = 类名()
创建对象的过程也叫实例化对象。
创建类、创建对象及访问对象属性、方法的示例
1 ''' 2 类、对象示例 3 ''' 4 5 6 class Person: 7 def __init__(self, name, age): 8 self.name = name 9 self.age = age 10 11 def say_hello(self): 12 print(f"Hello, my name is {self.name} and I'm {self.age} years old.") 13 14 15 # 创建Person对象 16 person = Person("Allen", 25) 17 18 # 调用方法 19 person.say_hello() # 输出:Hello, my name is Allen and I'm 25 years old. 20 # 对象的属性、方法,在类的方法里使用self.属性名/方法名()调用,在类外面就是对象.属性名/方法名()调用 21 print(person.name) # Allen
经典类(过时)
在早期版本的Python中,有两种类型的类:经典类和新式类。经典类是指在Python 2.x 版本中定义的类,没有显式地继承自 object
类
在经典类中,如果一个类没有显式地继承自其他类,则会默认继承自内建的 object
类。这意味着所有经典类都有一个共同的祖先,即 object
类。但由于没有显式地继承自 object
类,经典类不具备一些新式类的特性,比如方法解析顺序(Method Resolution Order, MRO)等。
1 class MyClass: # 经典类定义 2 3 def __init__(self, name): 4 self.name = name 5 6 def say_hello(self): 7 print("Hello, " + self.name) 8 9 obj = MyClass("Alice") 10 obj.say_hello() # 输出:Hello, Alice
在上面的示例中,MyClass
是一个经典类,它定义了一个构造函数 __init__()
和一个实例方法 say_hello()
。
需要注意的是,在 Python 3.x 版本中,经典类已经被废弃,新式类成为唯一的类类型。因此,在现代的Python编程中,经典类已经很少使用。
新式类(python3都是新式类)
新式类是指在 Python 2.2 版本引入的一种类类型。与经典类相比,新式类更加统一和功能强大。
在新式类中,所有的类都默认继承自内建的 object
类。
这意味着所有的新式类都有一个共同的祖先,使得类之间的继承关系更加清晰和一致。
新式类引入了一些特性和功能,包括:
-
方法解析顺序(Method Resolution Order, MRO):新式类通过使用 C3 算法来确定方法的调用顺序,可以处理多重继承时的方法冲突。
-
属性访问控制:新式类提供了
@property
装饰器、@classmethod
装饰器和@staticmethod
装饰器等,用于对属性进行访问控制和方法定义。 -
描述符协议:新式类支持描述符协议,可以通过定义
__get__()
、__set__()
和__delete__()
等方法来控制属性的访问。 -
统一对象模型:新式类统一了对象模型,使得类、实例、函数等可以互相转换和操作。
1 class MyClass(object): # 新式类定义 2 3 def __init__(self, name): 4 self.name = name 5 6 def say_hello(self): 7 print("Hello, " + self.name) 8 9 obj = MyClass("Alice") 10 obj.say_hello() # 输出:Hello, Alice
在上面的示例中,MyClass
是一个新式类,它继承自内建的 object
类,并定义了一个构造函数 __init__()
和一个实例方法 say_hello()
。
需要注意的是,在 Python 3.x 版本中,所有的类都默认是新式类,不再需要显式继承自 object
类。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!