49、类和对象

小白量化 2025-12-11 20:05:19 20 举报

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()

 弊端:每一次实例化对象后都需要手动给对象的实例属性赋值,这可能会显得有些繁琐并且效率不高,尤其是在处理大量对象时。

量化小白,从0开始学量化! 1

著作权归文章作者所有。 未经作者允许禁止转载!

最新回复 ( 0 )
发新帖
0
DEPRECATED: addslashes(): Passing null to parameter #1 ($string) of type string is deprecated (/data/user/htdocs/xiunophp/xiunophp.min.php:48)