1、类和对象
1.1 含义
1.1.1 类
对一系列具有相同属性(特征,用来描述是什么样子的,如人的身高、体重)和行为(即所具备的功能或能够执行的动作,用来说明能够做什么事情,如人会走路、说话等)的事物的统称。
注意:类是一个抽象的概念,并不是真实存在的事物。可以把它理解成一张洗衣机的设计图纸,根据这张设计图纸能够设计出很多的洗衣机,也就是我们所说的对象
1.1.2 对象
类的具体表现,是类创建出来的真实存在的事物,也是面向对象编程思想的核心。
面向对象编程中,先有类,再有对象。
注意:Python中万物皆为对象。数据类型、函数、模块、类、对象、对象属性、对象方法等等,都是对象。
# 示例
# 字符串
a = "hello world"
print(type(a)) # 通过type函数检测它的类型,a 是 str 类创建的对象
# 函数
def func():
print("hello world")
print(type(func)) # 说明func 是 function 类创建的对象
print(type(str)) # str 类是 type 类创建的对象,说明类本身也是对象
import copy
print(type(copy)) # 说明copy 模块是 module 类创建的对象1.2 定义类
# 语法结构 class ClassName: """类的描述信息""" 类体(属性、行为)
# 示例 class Person: pass # 占位符,表示空语句,当语法上需要语句但又不想执行任何操作使使用
1.3 实例化对象(创建对象)
# 语法结构 对象名 = 类名() # 类名()赋值给对象名
# 示例 class Person: pass # 第一次实例化对象 p1 = Person() print(p1) # 一个包含类型名称和十六进制内存地址的对象表示 print(id(p1)) # 十进制内存地址 # 第二次实例化对象 p2 = Person() print(p2) print(id(p2)) # 十进制内存地址 # 实例化对象p1 和 实例化对象p2 内存地址不同 ,说明是不同的对象,从而说明可以根据一个类创建多个对象
1.4 类中定义实例方法(方法即是函数)
实例方法是类定义的成员函数,需由对象(实例)调用。
这些方法至少包含一个 self 参数,该参数自动绑定到调用它的对象上,以便于在方法体内访问和修改对象的属性或状态。
# 示例
class Person:
def study(self): # 实例方法:带有self参数,代表对象本身
print("人类爱学习~")
print("self:", self)
# 第一次实例化对象
p1 = Person()
# 通过对象调用实例方法
p1.study() # self = p1
print("p1:", p1) # p1 和实例方法中的self参数相同 ==》 self = p1
# 第二次实例化对象
p2 = Person()
# 通过对象调用实例方法
p2.study() # self = p2
print("p2:", p2) # p2 和实例方法中的self参数相同 ==》 self = p2
# 哪一个对象调用的实例方法,那么实例方法中的self参数代表的就是哪一个对象注意:Python中将类中代表对象本身的参数命名为self是一种广泛遵循的约定,这样做有助于提高代码的可读性和一致性。但是这并不是Python语言的硬性要求,开发人员可以根据需要选择其他名称来替代self,但这样做不推荐,因为这会降低代码的可读性、可维护性和可扩展性
# 示例
class Person:
def study(s): # 不推荐
print("人类爱学习~")
print("s:", s)
p1 = Person()
p1.study()
1.5 类中定义属性(属性即是变量)
在python类中,根据属性定义位置的不同,可以将其明确区分为类属性和实例属性
1.5.1 类属性(共性)
定义在类中,并且在方法体外的变量。类属性是所有对象共享的属性,即所有对象都拥有相同的属性值。
# 示例
class Person:
age = 18 # 类属性
def study(self):
print("人类爱学习~")
# 访问类属性
print(Person.age) # 可以通过类名访问
# 实例化对象
p1 = Person()
p2 = Person()
print(p1.age) # 通过对象访问
print(p2.age) # 通过对象访问注意:如果需要在类外面或者方法内部定义类属性,需要通过 类名.属性名 的方式。
1.5.2 实例属性(个性)
在类的实例方法中通过self赋值的变量。实例属性是每个对象单独的属性,即对象拥有不同的属性值。
# 示例1
class Person:
def study(self):
print(f"{self.name}爱学习~") # self.name 实例属性
# 实例化对象
p1 = Person()
p2 = Person()
p3 = Person()
# 给实例属性赋值
p1.name = "张三"
p2.name = "李四"
p3.name = "王五"
# 通过对象调用实例方法
p1.study()
p2.study()
p3.study()注意:如果需要在类外面定义实例属性,需要通过 对象名.属性名 的方式。
# 示例2
class Person:
def introduce(self):
print(f"你好呀,我是{self.name},今年{self.age}岁了,身高:{self.height}米,体重:{self.weight}千克~")
# 实例化对象
p1 = Person()
p2 = Person()
# 给实例属性赋值
p1.name = "张三"
p1.age = 18
p1.height = 1.8
p1.weight = 80
p2.name = "李四"
p2.age = 19
p2.height = 1.9
p2.weight = 90
# 通过对象调用实例方法
p1.introduce()
p2.introduce() 弊端:每一次实例化对象后都需要手动给对象的实例属性赋值,这可能会显得有些繁琐并且效率不高,尤其是在处理大量对象时。
著作权归文章作者所有。 未经作者允许禁止转载!