精华内容
下载资源
问答
  • JAVA - 对象与对象变量

    千次阅读 2018-06-11 14:26:22
    对象变量Date deadline;定义了一个对象变量deadline,它可以引用Date类型的对象。但是,一定要认识到:变量deadline不是一个对象,实际上也没有引用对象。此时,不能将任何 Date 方法应用于这个变量上。可以显式地将...

    对象变量

    Date deadline;

    定义了一个对象变量deadline,它可以引用Date类型的对象。但是,一定要认识到:变量deadline不是一个对象,实际上也没有引用对象。此时,不能将任何 Date 方法应用于这个变量上。

    可以显式地将对象变量设置为null,表明这个对象变量目前没有引用任何对象。

    对象

    new Date();

    构造了一个对象。对象法直接访问只能通过对象引用来间接访问对象。当一个对象没有任何对象变量对它进行引用时,则它将成为垃圾回收机制的处理对象

    初始化对象变量

    * 用新构造的对象初始化对象变量:deadline = new Date();

    * 让对象变量引用一个已存在的对象:deadline = birthday;

     

    注:一个对象变量并没有实际包含一个对象,而仅仅引用一个对象。

    JAVA中,任何对象变量的值都是对存储在另外一个地方的一个对象的引用。new操作符的返回值也是一个引用。

    注:局部变量不会自动地初始化为null,而必须通过调用new 或将它们设置为null进行初始化。如果将一个方法应用于一个值为null的对象上,那么就会产生运行错误。

    展开全文
  • Python的类变量和对象变量声明解析

    千次阅读 2018-02-14 23:43:57
    Python的类和C++一样,也都是存在两种类型的变量,类变量和对象变量!前者由类拥有,被所有对象共享,后者由每个对象独有。这里我主要想讨论一下他们的声明办法。 首先说的是对象变量: 只要是声明在类的语句块...

    Python的类和C++一样,也都是存在两种类型的变量,类变量和对象变量!前者由类拥有,被所有对象共享,后者由每个对象独有。这里我主要想讨论一下他们的声明办法。

    首先说的是对象变量:

    只要是声明在类的语句块中,且没有”self.”前缀的变量都是类变量,且类变量是被所有对象共享的。

      注意加粗部分,如果声明在类的方法的语句块中,那么就是局部变量了!比如下面这个例子:
    复制代码

    
    #!/usr/bin/env python
    # -* - coding: UTF-8 -* -
    #Function: Use the class var
     class Person:
         cvar = 1
         def sayHi(self):
             fvar = 1
    
    print Person.cvar
    print Person.fvar

      那个cvar就是属于Python类的变量,而那个fvar就是方法sayHi()中的局部变量,第11条语句那里就会报错!

    接下来我们再来讨论一下对象变量的声明方法:

        在类的方法的语句块中声明的以“self.”开头的变量都是对象变量,由对象独有!

      比如下面这个例子:

    #!/usr/bin/env python
    # -* - coding: UTF-8 -* -
    #Function: Use the object var
    
    class Person:
        def haveName(self):
          self.name = 'Michael'
        def sayName(self):
          print self.name
    
    def main():
        p = Person()
    
        p.haveName()
        p.sayName()
    
    main()

      这里在haveName()方法中声明了一个对象变量,然后再在sayName()方法中调用。然后主程序中就会输出了!

      不过建议将对象变量声明在init()方法中,因为对象一被创建的时候即会调用这个方法,否则的话,比如上面那个例子,如果我先调用sayName()的话,那么就会出错,说对象实例还没有name这个属性!

      最后还想说的一点的就是,Python中没有private public这些关键字来标明类的变量或者方法的访问权限,但是可以通过在变量或者方法的前面加上”__”来表明这个成员是被类私有的,不能在外部调用,比如下面这个例子:

    #!/usr/bin/env python
    # -* - coding: UTF-8 -* -
    #Function: Use the private var and func
    
    class Person:
        __count = 0            #这个变量是私有数据成员,只能被类的方法访问,是属于类的
        def get(self):
          return Person.__count
        def __pri(self):
          print 'Yes'
    
    p = Person()
    print p.get()
    
    p.__pri()
    print p.__count

      比如这里的类变量__count就是类私有的,只能被类的函数成员调用(13行),而在类外面调用(16行)就是错误的!还有那个函数成员__pri()也是私有的,在类外面直接调用(15行),也是错误的!

    展开全文
  • 一、类变量 1.1 可变变量作为类变量:对于列表、字典、自定义类这些可变变量,如果将其...二、对象变量 2.1 不管是可变变量还是不可变变量,只要是放在构造函数中,则都是传值。即各个对象拥有自己的对象属性。...

    一、类变量

    python中类变量和成员变量、局部变量总结
    class Member():
        num=0 #类变量,可以直接用类调用,或用实例对象调用
        def __init__(self,x,y):
            self.x=x  #实例变量(成员变量),需要它是在类的构造函数内以self.开头来定义的
            self.y=y
            self.fuc(self.x,self.y)
    
        def add(self):
            total=2  #局部变量
            self.vara=3  # 局部变量,虽是以self.给出,但并没有在构造函数中进行初始化
            self.varb=4
            fina=(self.x+self.y)*total
            return fina
    
        def fuc(self,a,b):
            self.varc=a #成员变量,他们在成员函数fuc()中定义,但是在构造函数中调用了fuc()函数
            self.vard=b
    
    
    1.1 可变变量作为类变量:对于列表、字典、自定义类这些可变变量,如果将其作为类变量,则是传引用。即所有对象的类变量公用一个内存地址。
    1.2不可变变量作为类变量:对于INT,STRING这种不可变变量,如果将其作为类变量,则是传值。即所有对象的类变量有各自的内存地址。

    二、对象变量

    2.1 不管是可变变量还是不可变变量,只要是放在构造函数中,则都是传值。即各个对象拥有自己的对象属性。

    三、举例说明

    (1) 一个类的三个对象实例的属性被同时修改

    代码如下:

    class task_queue:
        queue=[]
        
        def append(self,obj):
            self.queue.append(obj)
            
        def print_queue(self):
            print self.queue
            
    
    if __name__=="__main__":
        a=task_queue()
        b=task_queue()
        c=task_queue()
        
        a.append('tc_1')
        
        a.print_queue()
        b.print_queue()
        c.print_queue()
    

    我们期望在队列 a 中插入 tc_1,结果 b 和 c 也被同时操作了,这并不是我们所期望的

    ['tc_1']
    ['tc_1']
    ['tc_1']
    

    这种行为很像静态变量的行为,可是 Python 中并没有 static 关键字,这是怎么回事?

    (2) Java 和 C++ 中的 static 关键字有多种用法

    其中,如果 static 去修饰一个类的属性,那么该属性就不是被各个对象所持有,而是一片公共的区域

    利用这种方法,我们可以在构造函数中对一个静态变量 ++ 以查看它被实例化了多少次

    class a(){
        static private count  
        public a(){
            this.count++
        }
        public static instance_count(){
            System.out.println(this.count)
        }
    }
    
    (3) 回到 Python

    Python 中并没有访问限定符 static,这种机制在 Python 中被称为 类的属性 和 对象的属性

    第一段代码中的 queue 在类的声明中被初始化为空,这是 类的属性

    a.append() 之后,queue 中添加了 ‘tc_1’,而 b 和 c 获取的 queue 依然是公共的 类的属性

    如何让这个属性变为对象自己的呢?改动如下:

    class task_queue:
        
        def __init__(self):
            self.queue=[]
        
        def append(self,obj):
            self.queue.append(obj)
            
        def print_queue(self):
            print self.queue
    

    在构造对象实例时构造对象自己的属性 queue

    ['tc_1']
    []
    []
    
    (4) 另一个例子
    class a():  
        num = 0  
    
    if __name__=="__main__":
        
        obj1 = a()  
        obj2 = a()   
        print obj1.num, obj2.num, a.num   
              
        obj1.num += 1  
        print obj1.num, obj2.num, a.num     
          
        a.num += 2  
        print obj1.num, obj2.num, a.num   
    

    实例化 obj1 和 obj2 的时候,他们都没有对属性 num 进行操作,所以打印出来的都是类 a 的属性 num,也就是 0

    后来 obj1 对自己的 num 进行 +1 之后,与类的属性脱离了关系,属性 num 就变成对象 obj1 自己的属性,而 obj2 尝试打印属性 num 的时候还是从类的属性中去读取

    第三段中,类的属性 +2 后,obj1.num 没有受到影响,而 obj2 尝试读取 num 属性时,依旧从类中去拿,所以它拿到的 num 是2

    0 0 0
    1 0 0
    1 2 2
    
    (5) 数字 字符串 元祖 修改全局变量时需要加global,列表和字典则不需要
    a = [1,2]
    c = {'q':1}
    d = 5
    e = 'qw'
    f = (1,2,3)
    def b():
        global d #数字 字符串 元祖 修改全局变量时需要加global,列表和字典则不需要。
        global e
        global f
    
        a[1] = 1
        a.append(7)
    
        c['b'] = 2
    
        d = d + 1
    
        e = e + 'rr'
    
        f = f + (222,)
    
        print (a)
        print (c)
        print (d)
        print (e)
        print (f)
    b()
    
    
    (6) python中的全局变量与局部变量

    全局变量与局部变量两者的本质区别就是在于作用域,全局变量即在整个程序中,任何地方都可以访问。而局部变量,试着在函数内部声明的变量,当函数运行结束时,局部变量就会被内存释放。

    例子:

    1 name='zs'
    2 def change():
    3      name='ls'
    4      change()
    5 print(name)   #输出为:’zs'  函数内的name是一个局部变量,函数运行结束即消失
    

    如果要修改全局变量,要在函数内部用关键字global声明。

    1 name='zs'
    2 def change():
    3     global name
    4     name='ls'
    5 change()
    6 print(name)     #输出为 ls   
    

    其实局部变量是有层次的,如果出现函数的嵌套,内层函数想调用外层的变量是,是不能用global声明的,因为外层的变量不叫全局变量。这时候如果想修改外层的变量,就得用到一个新的关键字:nonlocal

    强行使用global变量会报错,下面代码可以自己运行试试

    def fun():
        a = 3
    
        def fun2():
            global a
            a*= 2
            print(a)
    
        return fun2()
    fun()       
    

    如果使用nonlocal就可以完美解决:

     1 def fun():
     2     a = 3
     3 
     4     def fun2():
     5         nonlocal a
     6         a*= 2
     7         print(a)
     8 
     9     return fun2()
    10 fun()           #输出 6
    

    例子请参考:

    https://www.cnblogs.com/turtle-fly/p/3280610.html


    作者:daijiguo
    来源:CSDN
    原文:https://blog.csdn.net/daijiguo/article/details/79736757
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • 对象与对象变量

    千次阅读 2018-08-29 22:32:09
    要想使用对象,就必须首先构造对象,并指定其初始状态。然后对对象应用方法。  在java程序设计语言中,使用构造器构造新实例,构造器是一种特殊的方法,用来构造并初始化对象。下边看一个例子,在java库中包含一个...

             要想使用对象,就必须首先构造对象,并指定其初始状态。然后对对象应用方法。

             在java程序设计语言中,使用构造器构造新实例,构造器是一种特殊的方法,用来构造并初始化对象。下边看一个例子,在java库中包含一个Date类,他的对象将描述一个时间点,例如:“ December 31,1991,23:23:23 GMT”。

              构造器的名字应该与类名相同,因此Date类的构造器的名字为Date。要想构造一个Date对象,需要在构造器前面加上new操作符,如下显示:

             

    new Date();

     这个表达式构造了一个新对象。这个新对象被初始化为当前的日期和时间。

              如果需要的话也可以将一个对象传递给一个方法:

             System.out.println(new Date());

             或者,也可以将一个方法应用于刚刚创建的对象,Date类中有一个tostring方法。这个方法将返回一个字符串描述的日期格式,下面我们来举一个简单的例子:

    String s = new Date().toString();

            在上面两个例子中,够早的对象仅使用了一次,通常,希望构造的对象多次使用,因此,需要将对象存放在一个变量中;

            Date birhday = new Date();

            对象与对象变量之间存在着一个重要的区别。如,语句

       

       Date deadline;//deadline不是任何对象
    

    定义一个对象变量deadline,他可以引用Date类型的对象,但是,一定要认识到;变量deadline不是一个对象,实际上也没有引用对象,此时,不能讲任何Date方法应用于这个变量上。语句:

    s = deadline。toString();//not yet

    将产生编译错误。

            必须首先初始化变量deadline,这里有两个选择。淡然,可以用新构造的对象初始化这个变量;

    deadline = new Date();
    

            也可以让这个变量引用一个已经存在的对象;

            deadline = birthday;

    现在这两个对象引用同一个对象:

           一定要认识到:衣蛾对象变量并没有实际包含一个对象,而是引用一个对象。

          任何对变量的值都是对存储在另外一个地方的一个对象的引用。new操作符的返回值也是一个引用。例如下句:

    Date deadline = new Date();

    有两部分,表达式new Date()构造了一个Date类型的对,并且它的值是对新创建对象的引用,这引用存在变量deadline中

    可以显示的将对象变量设置为 null , 表明这个对象变量目前没有引用任何对象。

    deadline = null;
    ....
    if(deadline !=null)
        System.out.println(deadline);

            如果讲一个方法应用于一个值为null的对象上,那么就会产生运行是错误

    birthday = null;
    String s = birthday.toString();//runtime error

    局部变量不会自动的初始化为null,而必须通过调用new或将他们设置为null进行初始化。

     

    展开全文
  • 对象变量或with块变量未设置

    千次阅读 2013-08-10 21:24:33
    从开始了数据库的学习之后,这个问题就... 对象变量或块with变量未设置。其实就是你设置的数据库对象没有实例化好,也就是说么有连接到你的数据库。  当我们在进行数据库连接时,  第一,必须先声明对象变量。  第
  • 实时错误91,对象变量或with块变量未设置

    千次阅读 热门讨论 2016-05-11 19:32:07
    在添加用户信息的过程中,执行到while(mrc.EOF=False)的时候,提示如下错误,对象变量或with块变量未设置 当把光标放到set mrc=executesql(txtsql,msgtext)上面的时候,会发现mrc返回值为Nothing.mrc的值...
  • 实时错误“91” 对象变量或with块变量未设置”

    千次阅读 热门讨论 2019-11-08 12:32:00
    实时错误“91”对象变量或with块变量未设置” 提示这个错误一般是一下三个方面出现错误 (一)ODBC连接没成功 解决方法:首先在桌面新建一个文档,将后缀改为udl。双击并打开界面如下图 服务器选择自己电脑...
  • 对象变量与对象(VB.net)

    千次阅读 2010-04-04 00:52:00
    1.对象变量与对象本身是不同的,对象变量代表了对象真实数据在内存中的地址,可以粗略认为对象变量就是内存地址.而对象则是存储对象所用的整块内存区域. 传值的参数本身是传递的变量被复制一份,但对于对象变量实际...
  • 1.何谓对象变量? --在类的方法(即函数)里面定义一个以“self.”开头的变量;2.如何使用该对象变量?--使用“对象名.对象变量名”eg.#!/usr/bin/python # -*- coding: UTF-8 -*- class JustCounter: def count...
  • 用友U8固定资产双击打开卡片时错误,未设置对象变量或WITH BLOCK变量 解决方案 根据跟踪结果查询数据库结构,发现是fa_itemsmanual表中比正常数据的该表中多出一个字段造成的此问题,将多出的列删除,重新打开卡片...
  • 实时错误 '91' :对象变量或with块变量未设置

    千次阅读 多人点赞 2013-08-02 09:46:01
    这几天在做学生信息管理系统的时候,出现最多的应该就是这个问题了,“实时错误‘91’:对象变量或with块变量未设置”。如右图: 遇到这个问题,我们首先应该去参考MSDN,不过这时候MSDN似乎没有帮到我们很多...
  • js 声明数组和向数组中添加对象变量
  • 高高兴兴把学生系统敲完了,可接下来可是遇到了不少问题啊,错误91,对象变量未设置或With块变量未设置,着实把我折腾蒙了,查了一天的资料终于搞定了,心里顿时有点小欢喜,这种   错误多数是因为数据库没...
  • VB中 对象变量或with块变量未设置

    千次阅读 2009-03-03 11:10:00
    调式代码发现,是因为对象变量为设置成了Nothing值。 网上资料(http://msdn.microsoft.com/zh-cn/library/5szkzs17(VS.80).aspx)总结的如下情况分类:确保对象变量引用有效的对象,并为该对象指定或重新指定一个...
  • 答案:(2)定义的才是一个对象,而(1)定义的是一个对象变量,一个对象变量不是对象。为什么不是对象?因为没有对象让它引用。 如何date使用Date类的方法,会报错的,为什么?因为没有引用任何对象,你可以先...
  • 建立了一个select的sql语句查询,总是跳出“对象变量或with块变量未设置”的错误,叫了师兄过来给检查,结果一下就找出了错误。师兄的小计巧挺实用的,在Access中运行SQL语句:打开Access数据库——>在对象栏中,选择...
  • 运行时错误'91'对象变量或 With 块变量没有设置今天用了一段VBA小程序,在同事机器上能用,在我机器上用就是不行,具体是这段代码报错:Set Sheet1 = ThisWorkbook.Worksheets(1)调试时添加监视发现,ThisWorkbook...
  •  这两个的属性值均返回布尔型:True和False,使用BOF和 EOF 属性可确定 Recordset 对象是否包含记录,或者从一个记录移动到另一个记录时是否超出 Recordset 对象的限制。 下表即是各自的使用说明及查询结果: ...
  • 对象变量或with块变量未设置————问题根源

    千次阅读 热门讨论 2014-07-19 09:45:56
    由于今年的
  • ---------------------------KIS主控台---------------------------运行时错误 '91':未设置对象变量或 With block 变量---------------------------确定 --------------------------- 解决方法,数据服务器上的...
  • 这里举例一下MFC中的CPtrArray类,他是CObject类型指针对象的集合。通过int Add( CObject* newElement );注意参数是一个指针类型)可以向集合中添加元素。首先我们定义一个CPtrArray类型的对象。 CPtrArray ...
  • 块变量,那么只能是一种情况,对象变量未设置。 此处的对象只有 mrc   前面定义的一个 Recordset 记录集, 这个问题原因是没有连上数据库,导致后面的 Recordse t 对象的 EOF 和 BOF属性 无效。  而没有连上...
  • 我编写一段高考成绩查询系统,运行时提示:实时错误91,对象变量或with或块变量未设置",请问如何解决?,谢谢Private Sub Adodc1_WillMove(ByVal adReason As ADODB.EventReasonEnum, adStatus As ADODB....
  • 之后好了,所以如果给一个变量设置any类型时,如果这个变量是用于数组和对象来使用时, 一定要给它加上any=[]或者any={};这样可以避免很多不必要的麻烦。 userName:any;如果没有给它指定是数组还是对象的时候,它...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 251,242
精华内容 100,496
关键字:

对象变量