python3中类的重点与难点:类属性和实例属性的区别说明

先看图理解:

类属性就相当与全局变量,实例对象共有的属性,实例对象的属性为实例对象自己私有。

类属性就是类对象(Tool)所拥有的属性,它被所有类对象的实例对象(实例方法)所共有,在内存中只存在一个副本,这个和C++中类的静态成员变量有点类似。对于公有的类属性,在类外可以通过类对象和实例对象访问

类属性

class People(object):
    name = 'Tom'  #公有的类属性
    __age = 12     #私有的类属性

p = People()
print(p.name)           #正确
print(People.name)      #正确
print(p.__age)            #错误,不能在类外通过实例对象访问私有的类属性
print(People.__age)        #错误,不能在类外通过类对象访问私有的类属性

实例属性(对象属性)

class People(object):
    address = '山东' #类属性
    def __init__(self):
        self.name = 'xiaowang' #实例属性
        self.age = 20 #实例属性

p = People()
p.age =12 #实例属性
print(p.address) #正确
print(p.name)    #正确
print(p.age)     #正确

print(People.address) #正确
print(People.name)    #错误
print(People.age)     #错误

通过实例(对象)去修改类属性

class People(object):
    country = 'china' #类属性
print(People.country)
p = People()
print(p.country)
p.country = 'japan'
print(p.country)      #实例属性会屏蔽掉同名的类属性
print(People.country)
del p.country    #删除实例属性
print(p.country)

总结

如果需要在类外修改类属性,必须通过类对象去引用然后进行修改。如果通过实例对象去引用,会产生一个同名的实例属性,这种方式修改的是实例属性,不会影响到类属性,并且之后如果通过实例对象去引用该名称的属性,实例属性会强制屏蔽掉类属性,即引用的是实例属性,除非删除了该实例属性。

Python:类属性和实例属性总结

#类属性:类对象所拥有的的属性,它被所有类对象的实例对象共有,类对象和实例对象可以访问
#实例属性:实例对象所拥有的属性,只能通过实例对象访问
class Student:
    name='李明'  #类属性
    def __init__(self,age):
        self.age=age  #实例属性
        pass
    pass
Student.name='邓超'   #通过类对象去修改类属性  因为name属于类属性
print('-----------李明的数据------------------')
lm=Student(18)   #实例化对象,并传入参数
print(lm.age)    #通过实例对象去访问实例属性
print(lm.name) #通过实例对象去访问类属性
# lm.name='华晨宇'  #不能通过实例对象对类属性进行修改
print(lm.name)
print('--------------张三的数据--------------')
zs=Student(20)
print(zs.age)
print(zs.name)
print('------------通过类对象Student去访问name----------------')
print(Student.name)
# print(Student.age)   注:不能通过类对象去访问实例属性

运行结果

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Python 类属性与实例属性,类对象与实例对象用法分析

    本文实例讲述了Python 类属性与实例属性,类对象与实例对象用法.分享给大家供大家参考,具体如下: demo.py(类属性,所有实例对象共用类属性): # 定义工具类 继承object是为了兼容python2.x class Tool(object): # 使用赋值语句定义类属性,记录实例化工具对象的数量 count = 0 def __init__(self, name): self.name = name # 初始化方法内部定义及初始化实例属性 # 类名.类属性名 的方式访问类属性. To

  • Python类和实例的属性机制原理详解

    实例是具象化的类,它可以作为类访问所有静态绑定到类上的属性,包括类变量与方法,也可以作为实例访问动态绑定到实例上的属性. 实例1: class A: work = list("hello") kind = list("world") another = 1 def test1(self): print(self.work, self.kind, self.another) self.work[0], self.kind [0] = "t", &q

  • Python类属性与实例属性用法分析

    本文实例分析了Python类属性与实例属性用法.分享给大家供大家参考.具体如下: 类属性:类名.属性名 实例属性:实例.属性名 >>> class test(): ... ver=1 ... >>> a=test() >>> test.x=8 >>> a.__dict__ {} >>> a.x 8 >>> a.x=9 >>> a.__dict__ {'x': 9} 1.类的属性如何

  • python3中类的重点与难点:类属性和实例属性的区别说明

    先看图理解: 类属性就相当与全局变量,实例对象共有的属性,实例对象的属性为实例对象自己私有. 类属性就是类对象(Tool)所拥有的属性,它被所有类对象的实例对象(实例方法)所共有,在内存中只存在一个副本,这个和C++中类的静态成员变量有点类似.对于公有的类属性,在类外可以通过类对象和实例对象访问 类属性 class People(object): name = 'Tom' #公有的类属性 __age = 12 #私有的类属性 p = People() print(p.name) #正确 prin

  • es6中class类静态方法,静态属性,实例属性,实例方法的理解与应用分析

    本文实例讲述了es6中class类静态方法,静态属性,实例属性,实例方法.分享给大家供大家参考,具体如下: es6新增了一种定义对象实例的方法,使用class关键字定义类,与class相关的知识点也逐步火热起来,但是部分理解起来相对抽象,简单对class相关的知识点进行总结,更好的使用class.对于基本概念,请参见阮一峰老师的es6入门教程.本文主要总结class静态相关. 关于类有两个概念,1,类自身,:2,类的实例对象 总的来说:静态的是指向类自身,而不是指向实例对象,主要是归属不同,这是

  • ES6 javascript中class静态方法、属性与实例属性用法示例

    本文实例讲述了ES6 javascript中class静态方法.属性与实例属性用法.分享给大家供大家参考,具体如下: 类相当于实例的原型, 所有在类中定义的方法, 都会被实例继承. 如果在一个方法前, 加上static关键字, 就表示该方法不会被实例继承, 而是直接通过类来调用, 这就称为" 静态方法". class Foo { static classMethod() { return 'hello'; } } Foo.classMethod() // 'hello' var foo

  • python基础之类属性和实例属性

    属性:类属性和实例属性 类属性:就是类对象所有的属性 小结 '类属性 是可以 被 类对象和实例对象共同访问的 实例属性只能由实例对象访问 class Student: name='黎明' #属于类属性 就是Student类对象所拥有的 def __init__(self,age): self.age=age #实例属性 pass pass lm=Student(17) print(lm.name) #通过实例对象去访问类属性 print(lm.age) class Student: name='

  • js类的静态属性和实例属性的理解

    复制代码 代码如下: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>测试</title> </head> <body> <script type="text/javascript"><!-- function Man

  • python 基础学习第二弹 类属性和实例属性

    复制代码 代码如下: #!/usr/bin/env python class Foo(object): x=1 if __name__=='__main__': foo = Foo() print 'foo.x=',foo.x print 'Foo.x=',Foo.x foo.x = 2 print 'foo.x=',foo.x print 'Foo.x=',Foo.x

  • python如何对实例属性进行类型检查

    本文实例为大家分享了python对实例属性进行类型检查的具体代码,供大家参考,具体内容如下 案例: 在某项目中,我们实现了一些类,并希望能像静态语言那样对他们的实例属性进行类型检查 p = Person() p.name = 'xi_xi'         # 必须是str p.age = 18                  # 必须是int p.height = 1.75              # 必须是float 需求: 可以对实例变量名指定类型 赋予不正确类型抛出异常 #!/usr

  • Python中类变量和实例变量的区别

    目录 一.前言 二.解决过程 三.总结 一.前言 有人提问了一个关于Python类变量和实例变量的问题,这里拿出来给大家分享下,一起学习. 是用英文提问的,当然了英文看上去也不难,有点二级英文基础,也看得懂,实在不行,在线翻译一下也问题不大了. 二.解决过程 这里主要涉及到三个部分,类属性,实例属性,及实例属性的引用对象指向性问题.在该例中counter为类属性,__first为实例属性,print函数中的counter为实例属性的引用对象指向性问题.当ExampleClass类实例化时,__i

随机推荐