python 类定义完成
类属性,实例属性,类方法,实例方法,
class Animal(object):
area='地球'
def __init__(self,name):
self.name=name
def eat(self):
print("所有的动物都要吃饭,%s到饭点了快来吃饭"%self.name)
@classmethod
def uparea(cls):
cls.area='宇宙'
cls('狐狸').eat()
@staticmethod
def breath():
print("所有动物都要呼吸无论有氧还是无氧")
上面area属于类属性,实例属性也可以访问,__init__中的属于实例属性,eat,uparea,breath函数类和实例对象都能访问,__init__的name属性只是属于实例,如果类不实例是没有这个属性的
class Animal(object):
area='地球'
def __init__(self,name):
self.name=name
def eat(self):
print("所有的动物都要吃饭,%s到饭点了快来吃饭"%self.name)
@classmethod
def uparea(cls):
cls.area='宇宙'
cls('狐狸').eat()
@staticmethod
def breath():
print("所有动物都要呼吸无论有氧还是无氧")
Dog1=Animal('哈士奇')
print("没有实例化属性area,Dog1的区域是:",Dog1.area)
Dog1.area='环球'
print("实例化属性area之后,Dog1的区域是:",Dog1.area)
print("Animal的区域是:",Animal.area)
Dog2=Animal('柯基')
print("Dog2实例的area未赋值area的值是:",Dog2.area)
可以看出来和类属性一样名称的实例属性,如果实例属性没有定义,实例属性会继承类属性,如果实例定义一个和类属性一样名字的属性,那么在这个实例里面实例就会独有一个和类属性名字一样的属性,但是别的实例不具有这一属性,依旧继承类属性值
class Animal(object):
area='地球'
def __init__(self,name):
self.name=name
def eat(self):
print("所有的动物都要吃饭,%s到饭点了快来吃饭"%self.name)
@classmethod
def uparea(cls):
cls.area='宇宙'
cls('狐狸').eat()
@staticmethod
def breath():
print("所有动物都要呼吸无论有氧还是无氧")
print("Animal类uparea类函数调用前:",Animal.area)
Dog1=Animal('德牧')
Dog1.uparea()
print("Dog1实例uparea类函数调用后:",Dog1.area)
print("Animal类uparea类函数调用前:",Animal.area)
Dog2=Animal('柯基')
print("Dog2实例的area未赋值area的值是:",Dog2.area)
可以看出来实例和类都可以调用类函数,但是类属性变量一旦修改了,后续的类和实例如果不定义一个此名称的属性,那么继承的都是修改后的类属性
class Animal(object):
area='地球'
def __init__(self,name):
self.name=name
def eat(self):
print("所有的动物都要吃饭,%s到饭点了快来吃饭"%self.name)
@classmethod
def uparea(cls):
cls.area='宇宙'
cls('狐狸').eat()
@staticmethod
def breath():
print("所有动物都要呼吸无论有氧还是无氧")
Dog1=Animal('德牧')
Dog1.breath()
Dog2=Animal('柯基')
Dog2.breath()
Animal.breath()