python属性访问
python属性访问
【一】类属性
Python中的类属性是指在类定义中声明的属性,它属于整个类而不是类的实例。类属性可以用于存储类的共享数据或设置类的特定行为。以下是关于Python类属性的一些重要信息:
- 声明类属性:在类定义中,直接在类的内部使用赋值语句声明类属性。例如:
class MyClass:
class_attribute = 10
在这个例子中,class_attribute
是一个类属性,它的初始值为10。
- 类属性与实例属性的区别:类属性属于整个类,所有的实例对象共享相同的类属性。而实例属性是属于实例对象自身的,每个实例对象都有自己的实例属性。例如:
obj1 = MyClass()
obj2 = MyClass()
# 类属性的访问
print(obj1.class_attribute) # 输出:10
print(obj2.class_attribute) # 输出:10
# 修改类属性的值
MyClass.class_attribute = 20
# 类属性的修改会影响到所有的实例对象
print(obj1.class_attribute) # 输出:20
print(obj2.class_attribute) # 输出:20
- 类属性的访问与修改:可以通过类名或实例对象来访问和修改类属性。当通过实例对象访问类属性时,如果该实例对象没有同名的实例属性,则会访问到类属性。如果有同名的实例属性,那么实例属性会覆盖类属性。例如:
obj = MyClass()
print(obj.class_attribute) # 输出:10
# 修改类属性的值
obj.class_attribute = 30
print(obj.class_attribute) # 输出:30
# 创建一个新的实例对象,该实例对象访问到的是类属性
new_obj = MyClass()
print(new_obj.class_attribute) # 输出:10
- 类属性的命名约定:通常在Python中,类属性的名称使用大写字母和下划线的组合,以便与实例属性和普通变量进行区分。
总之,类属性是属于整个类的属性,在所有的实例对象之间共享。通过类名或实例对象都可以访问和修改类属性的值。
【二】对象属性
Python中的对象属性是指属于类的实例对象的属性,每个实例对象都可以具有不同的对象属性值。对象属性用于存储对象的状态和特征。以下是关于Python对象属性的一些重要信息:
- 声明对象属性:对象属性是在类的方法中使用
self
关键字声明的。在类的方法中通过赋值语句给self
创建的属性赋值,就可以声明对象属性。例如:
class MyClass:
def __init__(self, attribute):
self.object_attribute = attribute
在这个例子中,object_attribute
是一个对象属性,它的值由传递给构造函数的参数 attribute
决定。
- 访问和修改对象属性:可以通过实例对象来访问和修改对象属性。例如:
PYTHON复制123456obj = MyClass("value")
print(obj.object_attribute) # 输出:value
# 修改对象属性的值
obj.object_attribute = "new value"
print(obj.object_attribute) # 输出:new value
2.对象属性与类属性的区别:对象属性属于类的实例对象,每个实例对象都有自己的对象属性值。而类属性属于整个类,所有的实例对象共享相同的类属性。例如:
class MyClass:
class_attribute = 10
def __init__(self, attribute):
self.object_attribute = attribute
obj1 = MyClass("value1")
obj2 = MyClass("value2")
print(obj1.class_attribute) # 输出:10
print(obj2.class_attribute) # 输出:10
print(obj1.object_attribute) # 输出:value1
print(obj2.object_attribute) # 输出:value2
【三】类的特殊属性
类名.__name__
:类的名字(字符串)类名.__doc__
:类的文档字符串类名.__base__
:类的第一个父类(在讲继承时会讲)类名.__bases__
:类所有父类构成的元组(在讲继承时会讲)类名.__dict__
:类的字典属性类名.__module__
:类定义所在的模块类名.__class__
:实例对应的类(仅新式类中)
class Animal(object):
...
class People(Animal):
'''这是一个人类的注释'''
def __init__(self, name, age):
self.name = name
self.age = age
def run(self):
print(f"{self.name} can run!")
# 类名.__name__:类的名字(字符串)
print(People.__name__)
# People
# 类名.__doc__:类的文档字符串
print(People.__doc__)
# 这是一个人类的注释
# 类名.__base__:类的第一个父类(在讲继承时会讲)
print(People.__base__)
# <class '__main__.Animal'>
# 类名.__bases__:类所有父类构成的元组(在讲继承时会讲)
print(People.__bases__)
# (<class '__main__.Animal'>,)
# 类名.__dict__:类的字典属性
print(People.__dict__)
# {'__module__': '__main__', '__doc__': '这是一个人类的注释', '__init__': <function People.__init__ at 0x00000131B53C35B0>, 'run': <function People.run at 0x00000131B5631990>}
# 类名.__module__:类定义所在的模块
print(People.__module__)
# __main__
# 类名.__class__:实例对应的类(仅新式类中)
print(People.__class__)
# <class 'type'>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)