python属性访问

发布时间 2024-01-05 09:21:40作者: -半城烟雨

python属性访问

【一】类属性

Python中的类属性是指在类定义中声明的属性,它属于整个类而不是类的实例。类属性可以用于存储类的共享数据或设置类的特定行为。以下是关于Python类属性的一些重要信息:

  1. 声明类属性:在类定义中,直接在类的内部使用赋值语句声明类属性。例如:
class MyClass:
    class_attribute = 10

在这个例子中,class_attribute是一个类属性,它的初始值为10。

  1. 类属性与实例属性的区别:类属性属于整个类,所有的实例对象共享相同的类属性。而实例属性是属于实例对象自身的,每个实例对象都有自己的实例属性。例如:
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
  1. 类属性的访问与修改:可以通过类名或实例对象来访问和修改类属性。当通过实例对象访问类属性时,如果该实例对象没有同名的实例属性,则会访问到类属性。如果有同名的实例属性,那么实例属性会覆盖类属性。例如:
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
  1. 类属性的命名约定:通常在Python中,类属性的名称使用大写字母和下划线的组合,以便与实例属性和普通变量进行区分。

总之,类属性是属于整个类的属性,在所有的实例对象之间共享。通过类名或实例对象都可以访问和修改类属性的值。

【二】对象属性

Python中的对象属性是指属于类的实例对象的属性,每个实例对象都可以具有不同的对象属性值。对象属性用于存储对象的状态和特征。以下是关于Python对象属性的一些重要信息:

  1. 声明对象属性:对象属性是在类的方法中使用 self 关键字声明的。在类的方法中通过赋值语句给self创建的属性赋值,就可以声明对象属性。例如:
class MyClass:
    def __init__(self, attribute):
        self.object_attribute = attribute

在这个例子中,object_attribute是一个对象属性,它的值由传递给构造函数的参数 attribute 决定。

  1. 访问和修改对象属性:可以通过实例对象来访问和修改对象属性。例如:
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'>