美文网首页
python面向对象中成员属性、实例属性、类属性

python面向对象中成员属性、实例属性、类属性

作者: maxlike | 来源:发表于2018-08-02 20:29 被阅读0次

成员属性:

成员属性在这里值得是在自己定义的类中的属性,一经实例化就会成为实例特有的属性

例如:

class Person:         
        def __init__(self,name,age,gender,address):        
                self.name=name           
                self.age=age        
                self.gender=gender        
                self.address=address 

tom=Person('tom',23,'男','美国')
jerry=Person('jerry',22,'男','美国')
print(tom.name)print(jerry.name) 


#输出结果
tom
jerry

从上述代码中我们可以看到,我们通过定义了一个Person的类,实例化了两个对象tom和jerry。我们通过这两个对象去使用name的时候发现,他们输出的结果不同.这里的name就是成员变量/属性了。因为在我们实例化对象的时候,通过传参,我们把类中的self.name设置成了当前类的私有属性。

这时的name就成了对应对象的成员属性/变量了

实例属性/变量

还是上述的代码,这时我们在类外面通过对象引用一个类中没有声明的变量会有结果呢?

class Person:         
        def __init__(self,name,age,gender,address):        
                self.name=name           
                self.age=age        
                self.gender=gender        
                self.address=address 

tom=Person('tom',23,'男','美国')
jerry=Person('jerry',22,'男','美国')
tom.nickname='汤姆'
print(tom.nickname) 

 #输出结果
汤姆

从上述代码中我们看到,当对象调用一个类中没有声明的变量的时候,并给变量赋值,结果是可以正常输出,那么这时jerry中能不能直接使用nickname呢?我们来试试

class Person:         
        def __init__(self,name,age,gender,address):        
                self.name=name           
                self.age=age        
                self.gender=gender        
                self.address=address 

tom=Person('tom',23,'男','美国')
jerry=Person('jerry',22,'男','美国')
tom.nickname='汤姆'
print(tom.nickname)print(jerry.nickname)

  #输出结果
汤姆
Traceback (most recent call last):  File "C:/Python36/ttt.py", line 13, in <module> 
  print(jerry.nickname)AttributeError: 'Person' object has no attribute 'nickname'

我们看到,当我们直接使用nickname的时候,程序出错,告诉我们类Person中没有nickname这个属性。


这时,在tom中就有了nickname这个属性,而jerry中则没有nickname。从中我们可以得知,这时的nickname是tom这个对象所特有的属性/变量,并且这个属性独立于类型之外。这时的nickname就是对象/实例的实例属性/变量。在现实情况下,对象中可以存在从类中实例化的属性,也可以自己声明自己特有的属性。

类属性

类属性是定义声明在类中的一种属性,不同于成员属性。类属性是所有实例化对象共同的属性,并且可以直接使用类调用使用

例如:

class Person:         
        def __init__(self,name,age,gender,address):        
                self.name=name           
                self.age=age        
                self.gender=gender        
                self.address=address 


tom=Person('tom',23,'男','美国')
jerry=Person('jerry',22,'男','美国')
print(tom.num,jerry.num,Person.num) 

tom.num=30
print(tom.num,jerry.num,Person.num)
Person.num=40
print(tom.num,jerry.num,Person.num)


#输出结果
20 20 20
30 20 20
30 40 40

在上面,我们在类Person中,声明了一个没有带self 的变量num。在实例化的两个对象tom,jerry中都能使用,甚至我们还可以直接使用类去调用这个变量/属性,这时的num就是类Person的类属性/变量。

并且,我们还过修改num的值可以看出,当使用对象去改变num的值时,此时的num变成了tom对象中的实例变量/属性了,而通过类调用改变num的值,此时的num的值才发生改变。

总结

通过前面的代码演示,我们可以得出

成员属性是在类声明定义好的属性,通过self进行封装在类中,经过实例化对象后,成为对象特有的属性。

实例属性是没有经过类的声明定义,直接在对象中去声明,引用的变量,是当前对象不同与其他对象(通过相同类实例化的对象)的属性。它独立于类之外,只属于当前对象。

类属性是在类中声明定义的变量,但是不同于成员属性,类属性没有经过self封装而直接定义的。所以类属性只属于当前类,实例化的对象只能调用而不能修改。类属性只能通过类本身修改

相关文章

  • TypeScript:属性装饰器

    回顾类的属性 回顾面向对象,类中的属性分为实例属性和静态属性,实例属性属于实例化后的对象,静态属性属于类本身 在类...

  • python面向对象中成员属性、实例属性、类属性

    成员属性: 成员属性在这里值得是在自己定义的类中的属性,一经实例化就会成为实例特有的属性 例如: 从上述代码中我们...

  • python-面向对象——多态

    多态 python是一种运行时语言,python即支持面向过程,也支持面向对象 类属性和实例属性 实例属性:和具体...

  • python属性

    属性分为 成员属性和类属性 成员属性 成员属性又称为实例属性和对象属性, 声明在方法中 通过self声明 类属性...

  • Python学习-面向对象

    查看所有Python相关学习笔记 面向对象 面向对象知识点汇总: 面向对象静态属性实例属性(self)静态方法(@...

  • JS对象,原型

    面向对象 是一种思维方式三大特点:继承,多态,封装几个概念: 类,对象,属性,方法,成员,类成员,实例成员,静态类...

  • python 面向对象

    python 面向对象 self代表类的实例,而非类 Python内置类属性 类方法 list、dict 等都成为...

  • 面向对象的编程思想和Python的继承和多态,特殊方法,引用计数

    面向对象的编程思想和Python的类,访问和属性,继承在上一文中我们了解到了,私有的属性的访问方式:实例名._类名...

  • 六、继承与多态 @GeekBand

    面向对象特征 封装 继承 单继承 继承了实例变量、属性、实例方法、类方法 所有类的根类:NSObject 成员复用...

  • Python学习之路

    一、Python 中类的属性分为实例属性和类属性,属性就是附在对象后可被引用的函数或者数据。通常我们将类中的函数又...

网友评论

      本文标题:python面向对象中成员属性、实例属性、类属性

      本文链接:https://www.haomeiwen.com/subject/fjosvftx.html