Python面向对象基础:对象属性管理与Setter/Getter实现

顾星河
顾星河
发布时间:2026-10-12 | 5人浏览过
原创

在Python面向对象编程中,理解对象属性的存储机制与访问控制是基础且关键的一环。本文从对象与字典的相似性入手,解析__dict__的作用,并深入探讨如何通过自定义方法实现Setter和Getter,包括链式调用与读写合并的高级技巧。

对象属性的本质与存储

在Python中,类可以被视为一种类似字典的数据结构,而对象则是包含已赋值属性的实例。每个对象都通过内部的 __dict__ 字典来存放其数据。我们可以通过创建一个简单的类来观察这一机制。

class Person: pass

p = Person() # 构造对象
p.name = "longshuai" # 创建对象的属性name
p.age = 23   # 创建对象的属性age

上述代码中,我们直接为对象 p 赋予了 name 和 age 属性。这与字典的操作方式高度一致:

>>> d={}
>>> d["name"]="longshuai"
>>> d["age"]=23

>>> print(d["name"])
longshuai
>>> print(d["age"])
23

查看对象的 __dict__ 属性,可以直观地看到其内部存储的数据结构:

>>> p.__dict__
{'name': 'longshuai', 'age': 23}

初始化与类属性

虽然可以直接为对象赋值,但在实际开发中,通常通过定义 __init__() 方法来构造对象并初始化数据。此外,类属性(Class Attribute)与实例属性(Instance Attribute)有所区别。类属性存放在类的名称空间中,所有实例共享该属性,而实例属性则存储在各自的 __dict__ 中。

class Person:
 skin = "yellow" # 类属性
 def __init__(self,name,age):
  self.name = name # 实例属性
  self.age = age   # 实例属性

当实例化对象后,访问类属性可以通过 x.y 的方式直接获取:

>>> p = Person("longshuai",23)
>>> p.__dict__
{'name': 'longshuai', 'age': 23}
>>> p.skin
'yellow'

实现Setter与Getter

在面向对象设计中,Setter用于设置属性值,Getter用于获取属性值。我们可以通过定义普通方法来实现这一功能。以下是一个包含 set 和 get 方法的示例:

class Person:
 skin = "yellow"
 def __init__(self,name,age):
  self.name = name
  self.age = age
 def set(self,job):
  self.job = job
  return self
 def get(self):
  return self.name,self.age,self.job

使用示例如下:

>>> p = Person("longshuai",23)
>>> p.set("manager")
>>> name, age, job = p.get()
>>> print([name,age,job])
['longshuai', 23, 'manager']

链式调用技巧

如果 set 方法返回对象自身(return self),则可以实现方法的链式调用,使代码更加简洁:

>>> p = Person("longshuai",23)
>>> name,age,job = p.set("manager").get()

合并Setter与Getter

为了简化接口,有时需要将Setter和Getter合并为一个方法。其核心逻辑是通过判断参数是否存在来区分是调用Setter还是Getter。

def set_get_job(self, job=None):
 if job:
  self.job = job
 else:
  return self.job

在调用时:

p = Person("longshuai", 23)
p.set_get_job("manager")  # 给了参数,说明是setter
job = p.set_get_job()  # 没给参数,说明是getter

这种模式通过参数 job 的存在与否来动态决定行为,是Python中一种常见的属性封装技巧。以上就是Python面向对象基础中关于设置对象属性及实现Setter/Getter的详细内容,更多关于Python面向对象编程的资料请关注本站其它相关文章!

相关标签:

本站声明

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

Python 相关产品和应用

全部下载

专题列表