7.6. 类属性和实例属性¶
类里定义的变量属性---> 类属性 类名.属性名 使用
实例化后自己定义或者__init__构建的 ---->实例名.属性名 使用
7.6.1. 实例属性¶
通过在__init__中定义的属性都是实例化后自动继承的实例属性 也可以在实例化之后自己再次定义实例属性,通过 实例名称.属性名 进行调用
实例属性
实例属性是指定义在类的方法中的属性,只作用于当前实例中。
类属性¶
类属性
类属性是指定义在类中,并且在函数体外的属性,类属性可以在类的所有实例之间共享值, 也就是在所有实例化的对象中公用。
类属性共享数据¶
#!/usr/bin/env python
# -*- coding:utf8 -*-
# auther; 18793
# Date:2019/6/10 22:56
# filename: 实例属性共享数据.py
class Rectangle():
recs = []
def __init__(self, w, l):
self.width = w
self.len = l
self.recs.append((self.width,
self.len))
def print_size(self):
print("""{} by {}
""".format(self.width,
self.len))
r1 = Rectangle(10, 24)
r2 = Rectangle(20, 40)
r3 = Rectangle(100, 200)
print(Rectangle.recs)
输出结果
[(10, 24), (20, 40), (100, 200)]
用代码来理解¶
代码示例 1¶
#!/usr/bin/env python
#-*- coding:utf8 -*-
class A:
#类变量
bb = 11
def __init__(self,x,y):
#实例变量
self.x = x
self.y = y
a = A(2,3)
A.bb = 111111
print(a.x,a.y,a.bb) # 2 3 111111
print(A.bb) # 111111
a.bb = 2222 #实际上会在实例对象a里面新建一个属性bb
print(a.bb) # 2222
print(A.bb) # 111111
代码示例 2¶
#!/usr/bin/env python
#-*- coding:utf8 -*-
class DaYan(object):
neck = "脖子较长"
wing = "振翅频率较高"
leg = "腿是身体的中心支点" #类属性
def __init__(self,yumao,hui,eyes):
self.yumao = yumao #实例属性
self.hui = hui
self.eyes = eyes
def fly(self):
print("我的特性是:羽毛:{},喙:{},眼睛:{}".format(self.yumao,self.hui,self.eyes))
print("我是{},我的方法是{}".format(str(self.__class__).strip("<").strip(">").strip("'").split(".")[1], "fly...."))
def Jump(self, jump="我会跳起来"):
print("我的特性是{}".format(jump))
def exterior(self):
print("我是大雁类 "
"我的外观是:"
"{}\n{}\n{}".format(DaYan.neck,DaYan.wing,DaYan.leg))
hu = DaYan("灰色","尖尖的","红色")
hu.fly()
hu.Jump("jump....")
hu.Jump()
hu.exterior()
代码示例 3¶
#!/usr/bin/env python
# -*- coding:utf8 -*-
"""
1.实例属性
2.类属性
"""
class Demo_Property:
class_name = "hujianli_class" # 定义类属性
def __init__(self, x=0):
self.x = x # 实例属性
def class_info(self):
print("类属性是{}".format(Demo_Property.class_name))
print("实例属性是{}".format(self.x))
def chang(self, x):
'update class实例属性'
self.x = x
def chang_cn(self, name):
Demo_Property.class_name = name
testa = Demo_Property()
testb = Demo_Property()
print("初始化两个实例:")
testa.class_info()
testb.class_info()
print("-" * 100)
print('修改testa实例变量:')
testa.chang(3)
testa.class_info()
testb.class_info()
print("-" * 100)
print('修改testb实例变量:')
testb.chang(10)
testa.class_info()
testb.class_info()
print("-" * 100)
print('修改testa类变量:')
testa.chang_cn(30)
testa.class_info()
testb.class_info()
print("-" * 100)
print('修改testb类变量:')
testb.chang_cn(100)
testa.class_info()
testb.class_info()