大家好,今天跟大家再次介绍下类属性、实例属性、类方法、静态方法、实例方法,(主要是小白的我又加深的理解了一下,大神可以飘过,哈哈),直接上代码:
class Animal(object):
color='蓝色'#这里就是类属性,也可以定义为全局变量
def __init__(self,name,age):
global color#这个global方法就是类似共享全局变量的含义
self.name=name
self.age=age
@classmethod#被classmethod装饰的是类方法,能被类对象和实例对象同时调用
def test(self):
print('这是test函数')
def test1(self):#这是Animal类的实例方法,只能被实例对象调用
print('这是test1函数')
@staticmethod
def test2():#当Animal类的实例方法被staticmethod修饰时,那么这个实例方法使用的前提:表示既不需要使用实例对象,也不需要使用类对象
print('这是test3函数')
def color_fjh(self):
print('这个颜色是{}'.format(self.color))
a=Animal('拉布拉多',2)
print('实例对象属性为:{}'.format(a.name))
print('实例对象属性为:{}'.format(a.age))
print('类属性为:{}'.format(Animal.color))
print(a.color)
a.test()
try:
Animal.test()#如果类对象想要调用,那么需要将Animal类中的实例方法test被classmethod修饰
except TypeError as e:
print('类对象不能调类方法吗?')
a.color='粉色'#赋值给实例对象的方法,在不定义global前提下,是不能改变类属性的,只是间接的增加了一个实例属性
print(a.color)
print(Animal.color)
#可以使用实例对象和类对象同时调用被staticmethod修饰的静态方法
a.test2()
Animal.test2()
a.color_fjh()
运行结果:
实例对象属性为:拉布拉多
实例对象属性为:2
类属性为:蓝色
蓝色
这是test函数
这是test函数
粉色
蓝色
这是test3函数
这是test3函数
这个颜色是粉色
最后一个为什么输出粉色,因为对象做了一个增加实例属性的操作