python类属性和实例属性重复问题

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)

python类属性和实例属性重复问题_第1张图片

可以看出来和类属性一样名称的实例属性,如果实例属性没有定义,实例属性会继承类属性,如果实例定义一个和类属性一样名字的属性,那么在这个实例里面实例就会独有一个和类属性名字一样的属性,但是别的实例不具有这一属性,依旧继承类属性值

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)

python类属性和实例属性重复问题_第2张图片
可以看出来实例和类都可以调用类函数,但是类属性变量一旦修改了,后续的类和实例如果不定义一个此名称的属性,那么继承的都是修改后的类属性

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()

python类属性和实例属性重复问题_第3张图片
静态函数类和实例都可以调用

  • 技术无止境
  • python类属性和实例属性重复问题_第4张图片

你可能感兴趣的:(python,开发语言)