在Python中,属性可以分为类属性和对象属性(又称为实例属性)
这里我从属性的定义,和调用两个方面进行了总结
同时,根据类的内部外部作用域不同,又会产生不同的情况
总结如下,欢迎探讨指正
0.概述- 对象属性是每个对象都含有的,但是类属性只有一个(无论实例化了多少对象)
- 类属性:
- 可以被继承;
- 可以设置私有,但是很少这样做;
- 可以使用对象.属性进行调用,但是很少使用,因为不符合代码通用性
- 实际开发中,一般会使用装饰器@classmethod来修饰类方法,并且在类方法中对类属性和其他方法进行调用
class Person(object):
def __init__(self):
# 内部定义
self.name = '张三'
# 内部调用
print(self.name)
p1 = Person() # 输出 张三
1.2内部定义-外部调用
class Person(object):
def __init__(self):
# 内部定义
self.name = '张三'
p1 = Person()
# 外部调用
print(p1.name) # 输出 张三
1.3外部定义-外部调用
class Person(object):
pass
p1 = Person()
# 外部定义
p1.name = '张三'
# 外部调用
print(p1.name) # 输出 张三
1.4外部定义-内部调用
class Person(object):
def func1(self):
# 内部调用
print(self.name)
p1 = Person()
# 外部定义
p1.name = '张三'
# 验证代码
p1.func1() # 输出 张三
2.类属性
2.1内部定义-内部调用
class Person(object):
# 内部定义
count = 0
# 内部调用
print(count)
def __init__(self):
# 内部调用
print(Person.count)
# 验证代码
p1 = Person() # 输出 两个0
2.2内部定义-外部调用
class Person(object):
# 内部定义
count = 0
p1 = Person()
# 外部调用
print(Person.count) # 输出 0
print(p1.count) # 输出 0,但是不推荐使用这种对象.类属性的方式
2.3外部定义-外部调用
class Person(object):
pass
# 外部定义
Person.count = 0
# 外部调用
print(Person.count) # 输出 0
2.4外部定义-内部调用
class Person(object):
def func1(self):
# 内部调用
print(Person.count)
# 外部定义
Person.count = 0
# 验证代码
p1 = Person()
p1.func1() # 输出 0



