精华内容
下载资源
问答
  • python的class(类)中的object什么意思?

    万次阅读 多人点赞 2019-06-04 16:02:48
    原文地址:... 那写object和不写object什么区别? 好的,再用代码来理解它们的区别. #-.-coding:utf-8-.- #__author__='zhengtong' classPerson: """ 不带object ...

    原文地址:https://blog.csdn.net/DeepOscar/article/details/80947155


    那写object和不写object有什么区别?

    好的,再用代码来理解它们的区别.

    # -.- coding:utf-8 -.-
    # __author__ = 'zhengtong'
     
     
    class Person:
        """
        不带object
        """
        name = "zhengtong"
     
     
    class Animal(object):
        """
        带有object
        """
        name = "chonghong"
     
    if __name__ == "__main__":
        x = Person()
        print "Person", dir(x)
     
        y = Animal()
        print "Animal", dir(y)

    运行结果

    Person ['__doc__', '__module__', 'name']
    Animal ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', 
    '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', 
    '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'name']

    Person类很明显能够看出区别,不继承object对象,只拥有了__doc__ , __module__ 和 自己定义的name变量, 也就是说这个类的命名空间只有三个对象可以操作.

    Animal类继承了object对象,拥有了好多可操作对象,这些都是类中的高级特性。

     

    对于不太了解python类的同学来说,这些高级特性基本上没用处,但是对于那些要着手写框架或者写大型项目的高手来说,这些特性就比较有用了,比如说tornado里面的异常捕获时就有用到__class__来定位类的名称,还有高度灵活传参数的时候用到__dict__来完成.

     

    最后需要说清楚的一点, 本文是基于python 2.7.10版本,实际上在python 3 中已经默认就帮你加载了object了(即便你没有写上object)。

     

    这里附上一个表格用于区分python 2.x 和 python 3.x 中编写一个class的时候带上object和不带上object的区别.

    python 2.xpython 2.xpython 3.xpython 3.x
    不含object含object不含object含object
    __doc____doc____doc____doc__
    __module____module____module____module__
    say_hellosay_hellosay_hellosay_hello
     __class____class____class__
     __delattr____delattr____delattr__
     __dict____dict____dict__
     __format____format____format__
     __getattribute____getattribute____getattribute__
     __hash____hash____hash__
     __init____init____init__
     __new____new____new__
     __reduce____reduce____reduce__
     __reduce_ex____reduce_ex____reduce_ex__
     __repr____repr____repr__
     __setattr____setattr____setattr__
     __sizeof____sizeof____sizeof__
     __str____str____str__
     __subclasshook____subclasshook____subclasshook__
     __weakref____weakref____weakref__
      __dir____dir__
      __eq____eq__
      __ge____ge__
      __gt____gt__
      __le____le__
      __lt____lt__
      __ne____ne__
    展开全文
  • JavaScript中new Object()是什么

    千次阅读 2020-11-07 09:28:53
    写请假系统的时候,看到同学用了很多var xx = new Object(),不知道什么用处。 于是寻找Object()的用法。 js中var a=new Object()和var a={}有什么区别吗? 应该是没有区别的,两者都是生成一个默认的Object对象。js...

    问题引入:

    写请假系统的时候,看到同学用了很多var xx = new Object(),不知道什么用处。
    于是寻找Object()的用法。

    js中var a=new Object()和var a={}有什么区别吗?

    应该是没有区别的,两者都是生成一个默认的Object对象。js和其它语言一样,一切对象的基类都是Object,所以,new Object()和简易的{}是同样的空对象,就是默认的对象。本来我以为{}应该是一个没有任何属性和方法的对象,但事实证明,var a = {},a.toString()等Object对象所具有的方法,a都具有。由此也可以判断,其实a = {}就是a = new Objcet()的简单实现。就像在java语言中,String str = ""和String str = new String()都是创建String的对象一样。

    参考:js中var a=new Object()和var a={}有什么区别吗?

    展开全文
  • 主要是在synchronized()中放new Object 是四个线程一起,而放obj对象是一个一个的执行,这是什么原因呢? 代码: class XianChengDemo { public static void main(String[] args) { Card c = new Card(); ...
  • new object() 和 new object区别

    千次阅读 2019-07-17 17:36:21
    new 对象时如果后面有(): 如果有自定义默认构造函数则会调用;如果没有则会调用编译器合成的默认构造函数,对内存初始化 struct Student { int a; char * p; }; void foo() { Student* pStu1 = new ...

    ① new 对象时如果后面有():

        如果有自定义默认构造函数则会调用;如果没有则会调用编译器合成的默认构造函数,对内存初始化

    struct Student
    {
        int a;
        char * p;
    };
    
    void foo()
    {
        Student* pStu1 = new Student;  // a 和 p 值不会被初始化
        Student* pStu2 = new Student();// a = 0 , p = Null 
    }

     

    ② new 对象时如果后面没有():

        如果有自定义默认构造函数则会调用; 如果没有则不会调用;

    struct Student
    {
        Student()
        {
            a = 50;
            p = "Hello World";
        }
        int a;
        const char* p;
    };
    
    void foo()
    {
        Student* pStu1 = new Student;      // a = 50 p = "Hello World";
        Student* pStu2 = new Student();
    }

     

    展开全文
  • ue4 NewObject

    千次阅读 2016-12-06 14:53:20
    ue4 NewObject/StaticConstructObject_Internal/StaticAllocateObject/FObjectInitializer:对象创建和初始化 UObject是一套很复杂的体系,之前读ue3代码时曾分析过其类型系统实现,主要是与UClas

    出自:http://www.cnblogs.com/wellbye/p/5808894.html

    ue4 NewObject/StaticConstructObject_Internal/StaticAllocateObject/FObjectInitializer:对象创建和初始化

    UObject是一套很复杂的体系,之前读ue3代码时曾分析过其类型系统实现,主要是与UClass间的关系

    现在转到ue4,发现那一块其实差不多,于是再重点备忘一下UObject本身的创建和初始化过程

     

    1、首先,用NewObject<>来创建一个新对象:

    复制代码
    template< class T >
    T* NewObject(UObject* Outer, UClass* Class, FName Name = NAME_None, EObjectFlags Flags = RF_NoFlags, UObject* Template = nullptr, bool bCopyTransientsFromClassDefaults = false, FObjectInstancingGraph* InInstanceGraph = nullptr)
    {
        if (Name == NAME_None)
        {
            FObjectInitializer::AssertIfInConstructor(Outer, TEXT("NewObject with empty name can't be used to create default subobjects (inside of UObject derived class constructor) as it produces inconsistent object names. Use ObjectInitializer.CreateDefaultSuobject<> instead."));
        }
    
    #if DO_CHECK
        // Class was specified explicitly, so needs to be validated
        CheckIsClassChildOf_Internal(T::StaticClass(), Class);
    #endif
    
        return static_cast<T*>(StaticConstructObject_Internal(Class, Outer, Name, Flags, EInternalObjectFlags::None, Template, bCopyTransientsFromClassDefaults, InInstanceGraph));
    }
    复制代码

    除了一些条件检测,直接调了以前老版的对应物StaticConstructObject_Internal。

    这里的几个参数,有意思的是第5个参数Template,通过它可以复制对象。

     

    2、StaticConstructObject_Internal,这里面主要做两件事:

    一是用StaticAllocateObject来分配空间,

    二是在此空间上初始化对象。

     

    3、StaticAllocateObject:

    首先是检查要创建新对象,还是替换一个原有对象,因为一路传进来的有个Name参数。如果找到一个已有的同名对象,那么会强制那个对象析构,然后重用它的空间,否则的话,就会直接分配空间了:

    UObjectBase* FUObjectAllocator::AllocateUObject(int32 Size, int32 Alignment, bool bAllowPermanent)

    除了这件主要的工作,还有不少其它的事,比如管理对象之间的连接、在异步线程中创建对象时的通知等等,暂时不深究了。

     

    4、有了前者分配的空间,那么就可以在此处构造对象了:

         Result = StaticAllocateObject(InClass, InOuter, InName, InFlags, InternalSetFlags, bCanRecycleSubobjects, &bRecycledSubobject);
            (*InClass->ClassConstructor)( FObjectInitializer(Result, InTemplate, bCopyTransientsFromClassDefaults, true, InInstanceGraph) );

    这里ClassConstructor是每个UClass都有的一个函数指针类成员变量,实际上所有的UClass里该指针都指向一个全局模板函数:

    template<class T>
    void InternalConstructor( const FObjectInitializer& X )
    { 
        T::__DefaultConstructor(X);
    }

    而每个类里的__DefaultConstructor也是用宏统一生成的,内容也是简单的转发给new:

    static void __DefaultConstructor(const FObjectInitializer& X) { new((EInternal*)X.GetObj())TClass(X); }

    这个new的形式很不平凡,既有传给operator new的【(EInternal*)X.GetObj()】,又有传给该类实际构造函数的【FObjectInitializer& X】

    后者正是InClass->ClassConstructor需要的实参,而前者也是通过宏(DECLARE_CLASS)定义在每个UObject里的一个operator new:

    inline void* operator new( const size_t InSize, EInternal* InMem ) \
        { \
            return (void*)InMem; \
        }

    总结一下上面绕来绕去的东西就是:

    StaticAllocateObject分配了内存空间Result,然后以此为参数(当然还有其它的参数)构造了一个FObjectInitializer X,其中X.GetObj返回的就是这个内存地址Result;

    接着用【 new(Result) TClass(X) 】来构造对象,指明地址在Result上,并将X做为参数传给其构造函数。

     

    5、关于FObjectInitializer

    接上步,在构造函数返回后,其临时参数【FObjectInitializer& X】是要自动析构的,因而ue4利用此步骤,在这里面做了很多事,大部份的事都是与该体系内部状态管理有关的,暂时难以透彻理解。

    但有一个的操作与应用相关,即属性初始化,这是通过InitProperties来完成的:

    复制代码
    void FObjectInitializer::InitProperties(UObject* Obj, UClass* DefaultsClass, UObject* DefaultData, bool bCopyTransientsFromClassDefaults)
    {
      ……
        UClass* Class = Obj->GetClass();
      ……if (!bNeedInitialize && bCanUsePostConstructLink)
        {
            // This is just a fast path for the below in the common case that we are not doing a duplicate or initializing a CDO and this is all native.
            // We only do it if the DefaultData object is NOT a CDO of the object that's being initialized. CDO data is already initialized in the
            // object's constructor.
            if (DefaultData)
            {
                if (Class->GetDefaultObject(false) != DefaultData)
                {
                    QUICK_SCOPE_CYCLE_COUNTER(STAT_InitProperties_FromTemplate);
                    for (UProperty* P = Class->PropertyLink; P; P = P->PropertyLinkNext)
                    {
                        P->CopyCompleteValue_InContainer(Obj, DefaultData);
                    }
                }
                else
                {
                    QUICK_SCOPE_CYCLE_COUNTER(STAT_InitProperties_ConfigEtcOnly);
                    // Copy all properties that require additional initialization (e.g. CPF_Config).
                    for (UProperty* P = Class->PostConstructLink; P; P = P->PostConstructLinkNext)
                    {
                        P->CopyCompleteValue_InContainer(Obj, DefaultData);
                    }
                }
            }
      ……
    
    复制代码

    在这里通过遍历UClass上记录的属性元数据,可以对当前实例的每个属性进行赋值。

    有趣的是DefaultData这个参数,也就是最早的Template参数,一路辗转到此。当然如果Template为空的话,这里的DefaultData就是该类的CDO了。

    代码里明显体现出对此两种情况的不同处理策略:

    如果是指定了要复制的对象Template->DefaultData,那么要遍历类上的所有的属性,因为对于一个实际的复制目标,你不知道它哪些属性已经改变了(不是默认值 ),因此必须全盘复制

    而如果只是从CDO复制的话,那么只需要处理该类里明确指定过可能有初始化状态的字段,如打上CPF_Config标记的字段,它们在启动时会去ini文件里提取相应的配置值。


    展开全文
  • Object o = new Object()深度解析

    千次阅读 2019-12-04 17:27:34
    Object o = new Object(); 对象初始化过程 申请内存 初始化成员变量 0 设置初始值 8 对象头包括什么 锁的信息 Gc标记信息 标记清除算法 GC年龄(4位最大15) 为什么标记清除算法标记年龄最大15 对象头GC标记信息...
  • 例如:我创建了一个Node类,里面包含三个private属性previous,obj跟next...为什么我用Node node=null;然后node.setObj(obj)就会报nullPointer的错误。而用Node node=new Node(); 然后再node.setObj(obj)就不会报错。
  • Object.create() 与 new Object()区别

    千次阅读 2019-02-23 13:48:23
    参考文档《Object.create() 和 new Object()》添加链接描述 Object.cerate() 必须接收一个对象参数,创建的新对象的原型指向接收的参数对象,new Object() 创建的新对象的原型指向的是 Object.prototype. (表述有点...
  • ``` function Obj(){} var obj = new Obj(); alert(obj); //rerurns [object Object] ``` 我知道这是一个对象,但是,返回的第一个object和第二个Object都是什么意思
  • 下面你这段程序中,Object不用static 修饰时不会产生死锁,加上static就会产生死锁,为什么会这样呢? ``` public class TestDeadLock implements Runnable{ static Object o1 = new Object(); //在Object前面加...
  • new Object();的含义是什么?感觉有两种解释: 1.创建一个Object对象。 2.创建一个Object对象并将其传入Object()函数中。 应该是这两种解释的哪一种?还是有其他的解释?Java中又是哪种解释?不要只说结论,...
  • [img=https://img-bbs.csdn.net/upload/202010/04/1601800869_489474.png][/img] var obj =new Object() 与 var obj = { } 为什么一个在内存中开空间, 而另一个不开辟空间?
  • Object.create()和new object()和{}的区别

    千次阅读 2018-07-25 15:53:11
    Object.create()介绍 Object.create(null) 创建的对象是一个空对象,在该对象上没有继承 Object.prototype 原型链上的属性或者方法,例如:toString(), hasOwnProperty()等方法 Object.create()方法接受两个参数:...
  • Object.create(null)和new Object的区别

    千次阅读 2016-11-28 14:25:18
    可以看到,object.create(null)造出来的object是没有任何属性的,是空的
  • 想要知道 Object o = new Object();在内存中占用了多少字节,可以使用如下方法直观的看到。 maven中添加依赖 <dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core&...
  • new Object()中传入参数的用法

    万次阅读 2017-12-01 18:38:22
    new Object()中传入参数的用法
  • JS Object() 与 new Object()的区别

    万次阅读 2018-04-06 23:12:06
    //无意间看到这段代码 function ... var prototype = Object(superType.prototype); prototype.constructor = subType; subType.prototype = prototype; } // 以上是原型继承的优化方法 // 看到这个O...
  • 关注公众号免费领取技术书籍和面试资料 前言 我们来分析一下堆内布局以及Java对象... private Object obj1 = new Object(); public static void main(String[] args) { Object obj2 = new Object(); } } 123456789
  • 说说new object()、new Array()和var data=[]

    千次阅读 2018-04-19 09:45:25
    写在开头,作为一个只会重构菜鸟...var o ={} === var o = new Object();var a =[] === var a = new Array();1.new object() $.ajax({ type:"get", url:"../js/text.json...
  • js: new Object()与Object.create()的区别

    千次阅读 2019-05-22 09:37:59
    Object.create(proto, [propertiesObject]) //方法创建一个新对象,使用现有的对象来提供新创建的对象的proto。 参数: proto : 必须。表示新建对象的原型对象,即该参数会被赋值到目标对象(即新对象,或说是最后...
  • js 中new Object 和 {}的区别

    千次阅读 2016-09-03 16:29:15
    来自:... var Obj = function() {}; ...var b = new Object(); var c = new Obj(); 這樣纔可以。結果 c 遠快於 a 和 b,a 略快於 b。 然而 var Vec = function(a, b) { thi
  • 原文:http://zhidao.baidu.com/link?url=G057tERsdTZUDihwpY-ASA1ZnkUtwgmYQRF-aHOcyPy2u_O1MIA1oifEjTBpQqZ5rPSg8sNdydsb2L0feASYCa ...js和其它语言一样,一切对象的基类都是Object,所以,new Object()和简
  • object sender, EventArgs e什么意思

    千次阅读 2015-12-08 17:20:20
    sender的意思是“寄件人,发送机”等,在C#中每点击一个事件自动生成的参数中都有(object sender, EventArgs e),其实sender就是你所关联的控件,可以通过强制转换得到该控件的引用。private void label1_Mouse...
  • gobject 中 g_object_new 流程简介

    千次阅读 2017-03-15 21:57:08
    g_object_new Table of Contents 1 g_object_new 流程 1 g_object_new 流程 g_object_new的函数签名是这样的: gpointer g_object_new (GType object_type, const gchar *first_property_
  • new一个Object对象占用多少内存?

    万次阅读 2014-02-25 14:45:04
    Java的自动内存管理机制省却了很多编码工作,...也许很多人都没有考虑过这个问题,new一个Object对象到底占用多少内存呢( Object obj = new Object() )?   这里很明确的是obj是一个指向对象的引用,引用的长
  • 出现这种情况是调用object类__new__方法参数传递多了导致: 一般是使用了类似super().new(cls,*args,**kwargs) 或object.new(self,*args,**kwargs) 这种方式调用的,此时只要改成: super().new(cls) 或object....
  • 题目来源: 图片参考:https://blog.csdn.net/u010737756/article/details/104843152 1.半初始化 (1)new 一个分配空间,划分内存区域,... class对象是在堆区还是方法区 (1)为什么不使用c++对象直接表示java对象
  • new Object()注入到Spring容器public class UserDao { @Resource AccountService accountService; public void print(){ System.out.println(accountService); } }比如有以上这个类,实现将new UserDao()...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,893,385
精华内容 1,157,354
关键字:

newobject是什么意思