定义
----
属性其实就是类命名空间下的一个变量,故其定义规则同普通变量定义规则:
- 属性名:字母(a-zA-Z)、数字、下划线`_`,数字不能开头
- 初始化时,必须赋值;可以是直接量或表达式。
Python一切皆对象,属性、方法其实均是类命名空间下的变量。属性、方法/函数其实是互通的。
~~~
# 属性b、c其实是类方法、静态方法
class Demo:
a = 1
def b(cls, *args, **kwargs):
pass
b = classmethod(b)
def c(*args, **kwargs):
pass
c = staticmethod(c)
~~~
Python中有两种属性:
**类属性**:类.属性
**实例属性**:实例.属性
查找、设置
-----------------
#### 属性查找:
类似于变量在作用域中的查找,类属性 > 实例属性
实例属性不存在时,会向上查找类属性的值作为实例属性
#### 属性设置:
类对象和实例对象是两个独立的对象。
类属性 通过类设置:类.属性 = xxx || cls.属性 = xxx
实例属性 通过实例设置:实例.属性 = xxx || self.属性 = xxx
#### 即:
1. Python中的类和实例是两个完全独立的对象;
2. Python中属性的查找是按照从下到上的顺序来查找属性;
3. Python中的属性设置是针对对象本身进行的;
属性的修改 与 向上查找:
~~~
class Demo:
a = 0
def instance_method(self):
self.a = 'instance-property'
@classmethod
def class_method(cls):
cls.a = 'class-property'
ins = Demo()
# 实例方法 修改 实例属性
ins.instance_method()
print(Demo.a, ins.a) # 0 instance-property
# 修改 实例.属性
ins.a = 2
print(Demo.a, ins.a) # 0 2
# 类方法 修改 类属性
ins.class_method()
print(Demo.a, ins.a) # class-property 2
# 修改 类.属性
Demo.a = 3
print(Demo.a, ins.a) # 3 2
# 删除实例属性:实例属性的查找会取类属性值
del ins.a
print(Demo.a, ins.a) # 3 3
~~~
实例a、实例b、对象A 相互独立;
类属性、实例属性 相互独立;
属性的向上查找:
~~~
class A:
a = 10
a = A()
b = A()
print(a.__dict__, b.__dict__) # {} {}
print(a.a, b.a, A.a) # 10 10 10
a.a += 2
print(a.a, b.a, A.a) # 12 10 10
A.a += 3
print(a.a, b.a, A.a) # 12 13 13
~~~
- 前言
- Python编程规范
- 编码
- 代码
- 缩进、行宽、引号、空行
- 空格
- 换行
- import
- 注释
- 代码注释
- 文档注释(Docstring)
- 命名规范
- 数据结构
- 变量
- 变量作用域
- 命名空间
- 作用域
- python作用域
- 对象
- 序列
- 可迭代对象
- 迭代器
- 生成器
- 可迭代对象 & 迭代器 & 生成器
- 整数池 & 字符串intern
- 数据类型
- 数字
- int
- float
- NaN
- 四舍五入 & 取整
- 列表
- 元组
- 字典
- 集合
- 字符串
- 字符集&字符编码
- 字符串&字节串
- 字符串函数
- 字符串格式化
- str.format
- Formatted string literals
- format函数
- string.Formatter类
- %
- Format String Syntax
- Format Specification Mini-Language
- fill
- align
- sign
- #
- 0
- width
- grouping_option
- .precision
- type
- locale
- Python3 locale 模块
- 语句
- 运算符
- if/else
- for...in
- while
- break/continue
- 函数
- 函数
- 函数参数
- 递归函数
- 匿名函数
- 高阶函数
- map
- reduce
- filter
- sorted
- 返回函数
- 闭包
- 装饰器
- 函数装饰器
- 带参数的装饰器
- 类装饰器
- 带参数的类装饰器
- 偏函数
- 面向对象
- 类 & 实例
- 属性
- 方法
- 访问限制
- 继承
- 新式类 & 经典类
- MRO
- MixIn
- 模块
- 特殊变量
- 编写模块
- 引入 & 重载
- 搜索模块
- 第三方模块
- 常见模块
- 标准库
- os
- sys
- datetime
- re
- urllib
- time/datetime
- threading
- multiprocessing
- builtins
- help
- range
- enumerate
- 异同
- str() repr() ascii()
- exit()、sys.exit()、os._exit()
- 数据库
- mysql
- 错误、调试、测试
- 异常
- 异常处理
- 自定义异常
- 抛出异常
- 调试
- logging
- pdb
- 线程&&进程
- 线程
- 杂
- python 脚本传参
- python无关
- redis
- mongo
- linux
- mysql简略