-
2020-06-06 13:27:27
Python3中定义类的时候加括号和不加括号有区别吗?
在Python中定义类class的时候,可以加上():
#!/usr/bin/env python3 class Persion(): def __init__(self,name): self.name = name print(self) print(type(self)) print(self.__class__) ### 实例化 tt = Persion("aa")
也可以不加上():
#!/usr/bin/env python3 class Persion: def __init__(self,name): self.name = name print(self) print(type(self)) print(self.__class__) ### 实例化 tt = Persion("aa")
我们还可以加 object
#!/usr/bin/env python3 class Persion(object): def __init__(self,name): self.name = name print(self) print(type(self)) print(this.__class__) ### 实例化 tt = Persion("aa")
object 又是什么?
object是python的默认类,他有很多的方法,比如list,str,dict等等都是继承了object类的方法。
继承了object的类属于新式类 ÿ
更多相关内容 -
new对象时,类名后加括号与不加括号的区别
2018-08-02 10:30:00#include &...class empty { }; // 一个默认构造函数,一个自定义构造函数 class Base { public: Base() { cout << " default Base construct " << endl; ...#include <iostream> using namespace std; // 空类 class empty { }; // 一个默认构造函数,一个自定义构造函数 class Base { public: Base() { cout << " default Base construct " << endl; m_nValue = 100; }; Base(int nValue) { cout << " custom Base construct " << endl; m_nValue = nValue; }; private: int m_nValue; }; // 一个复合默认构造函数 class custom { public: custom(int value = 100) { cout << " default && custom construct " << endl; m_nValue = value; } private: int m_nValue; }; void main() { empty* pEmpty1 = new empty; empty* pEmpty2 = new empty(); Base* pBase1 = new Base; Base* pBase2 = new Base(); Base* pBase3 = new Base(200); custom* pCustom1 = new custom; custom* pCustom2 = new custom(); delete pEmpty1; delete pEmpty2; delete pBase1; delete pBase2; delete pBase3; delete pCustom1; delete pCustom2; } // Result: /* default Base construct default Base construct custom Base construct default && custom construct default && custom construct */
至此足以。
【2】加括号与不加的区别
(1)加括号
1. 若括号为空,即无实参项,那么理解为调用默认构造函数;
2. 若括号非空,即有实参项,可以理解为调用重载构造函数,或复合默认构造函数。
(2)不加括号
调用默认构造函数,或复合默认构造函数。
【3】默认构造函数 与 复合默认构造函数的区别
默认构造函数:编译器会为每一个类默认提供一个构造函数,称之为默认构造函数。默认构造函数一般参数为空。
复合默认构造函数:一个由用户自定义的所有形式参数都赋有默认值的构造函数,称之为复合默认构造函数。
两者联系:
一个类中,若一旦有一个用户自定义构造函数,那么由编译器提供的默认构造函数就不再存在。用户自定义的构造函数为默认构造函数的重载版。
默认构造函数不复存在时,用户必须为这个类再自定义一个复合默认构造函数(选所有自定义构造函数其中之一,把形式参数均赋默认值即可)。
不论自定义构造函数(即构造函数的重载版)有多少个,只允许有一个复合默认构造函数。
-
[C++]类名加个括号是什么东东
2021-01-06 21:13:13class MyClass { public: MyClass() { printf("MyClass\n"); } }; int _tmain(int argc, _TCHAR* argv[]) { MyClass(); return 0; } 关键点在于,有一行代码是这样的 MyClass() 来个更难点的,下面的能编译过...先考考大家,下面的代码,编译得过吗?
class MyClass { public: MyClass() { printf("MyClass\n"); } }; int _tmain(int argc, _TCHAR* argv[]) { MyClass(); return 0; }
关键点在于,有一行代码是这样的
MyClass()
来个更难点的,下面的能编译过吗?template <class T> class MyTemp { public: MyTemp(T arg) { t = arg; std::cout << t << std::endl; } private: T t; }; int _tmain(int argc, _TCHAR* argv[]) { MyTemp<double>(5.5); return 0; }
关键点在于:
MyTemp<double>(5.5);
揭晓答案,先从QT的一行代码说起
{ insertRow(arow, QList<QStandardItem*>() << aitem); }
这个调用对应的函数为:void QStandardItem::insertRow(int row, const QList<QStandardItem*> &items) { Q_D(QStandardItem); if (row < 0) return; if (columnCount() < items.count()) setColumnCount(items.count()); d->insertRows(row, 1, items); }
也就是说,
QList<QStandardItem*>() << aitem会对应成const QList<QStandardItem*> &items
那么
QList<QStandardItem*>()的意思就是会生成一个临时对象QList<QStandardItem*>
回到开头
MyClass()会成一个临时对象MyClass
MyTemp<double>(5.5);生成一个临时对象MyTemp<double>
就这样.... -
vue中动态添加class类名的方法
2021-01-19 17:19:09vue 动态添加class类名,灵活得让你发狂,下面示例几个 动态添加类名 <!-- 第一种方式:对象的形式 --> <!-- 第一个参数 类名, 第二个参数:boolean值 --> <!-- 对象的形式: 用花括号包裹... -
python 类名和调用函数时 加括号和不加括号的区别
2022-04-19 18:00:301. 类名加括号和不加括号 class clsTest(): y = 'you' def __init__(self): self.y = 'me' print clsTest x = clsTest print x print(x.y) x = clsTest() print(x.y) 执行结果: main.clsTestmain....1. 类名加括号和不加括号
class clsTest(): y = 'you' def __init__(self): self.y = 'me' print clsTest x = clsTest print x print(x.y) x = clsTest() print(x.y)
执行结果:
main.clsTest
main.clsTest
you
me分析:
加括号的是类的实例化;不加括号就不是启动实例,这个应该和设置一个别名是一样的。
2. 函数名加括号和不加括号
def bracket(data): return data if __name__ == '__main__': print bracket # 不带括号调用的结果:<function bracket at 0x0000000004DD0B38>,a是整个函数体,是一个函数对象,不须等该函数执行完成 a = bracket print a # 带括号调用的结果:6 ,b是函数执行后返回的值6,须等该函数执行完成的结果 b = bracket(6) print b
执行结果:
<function bracket at 0x7ff43a5b95f0>
<function bracket at 0x7ff43a5b95f0>
6 -
python里的class定义类为什么括号有object
2020-05-09 10:27:02很多同学有疑问,为什么python里的class定义类括号有object 当我在python编辑器里输入object后,然后按住ctrl键+鼠标左键 即可查看object里的方法 class object: """ The most base type """ # del obj.xxx或... -
【转载】python 类名和调用函数时 加括号和不加括号的区别
2019-09-11 11:48:25因为本文参考的文章较多,csdn无法在原文链接处填写多个链接,故此处...1. 类名加括号和不加括号 class clsTest(): y = 'you' def __init__(self): self.y = 'me' print clsTest x = clsTest print x print(x... -
python中的class名没有括号_python定义类不写括号吗
2020-12-01 06:45:25Python 定义类的简单语法如下:class 类名:执行语句...零个到多个类变量...零个到多个方法...类名只要是一个合法的标识符即可,但这仅仅满足的是 Python 的语法要求:如果从程序的可读性方面来看,Python 的类名... -
C++类的名字后面直接加括号
2020-09-13 11:43:01class A { private: static int k; int h; public: class B { public: void foo(const A& a){ cout << k << endl; //运行完成 cout << a.h << endl;//运行完成 } }; ... -
python定义类不写括号吗
2021-02-03 11:37:55Python定义类的简单语法如下:class类名:执行语句...零个到多个类变量...零个到多个方法...类名只要是一个合法的标识符即可,但这仅仅满足的是 Python 的语法要求:如果从程序的可读性方面来看,Python 的类名必须... -
vue 动态添加class类名
2020-09-09 14:40:45<template> <div> <h2>...-- 对象的形式: 用花括号包裹起来,类名用引号, --> <!-- 优点: 以对象的形式可以写多个,用逗号分开 --> <p :class="{'p1' : true... -
c++类创建对象带括号和不带括号的区别
2021-08-05 14:34:43而使用new+类名的方式创建,不加括号时不会对成员变量初始化,而加括号会初始化为0。 结论: 对于有构造函数的类: cat c1;//在堆栈中创建对象和引用,调用cat()构造函数 cat c2();//只在栈中创建引用,没有堆中的... -
vue中动态添加class类名
2019-11-13 21:20:09动态添加class类名,灵活得让你发狂,下面示例几个 <template> <div> <h2>动态添加类名</h2> <!-- 第一种方式:对象的形式 --> <!-- 第一个参数 类名, 第二个参数:boolean值 -... -
[菜鸟]C++创建类对象时(无参)后不加括号与加括号的区别
2021-03-14 23:12:07在不考虑用new动态创建对象的情况下,用最普通的类名 对象名(参数);的方法创建对象先贴上最正常最普通的代码 #includeusing namespace std;class C{public:C(){cout<};C(int m){cout<};private:int n;};int ... -
为什么在Java中围绕类名使用括号?
2021-03-07 01:47:55我的问题是:为什么有时在括号内声明类,如以下代码所示?public class Animal {public static void hide() {System.out.println("The hide method in Animal.");}public void override() {System.out.print... -
c/c++里的new加括号与不加括号的区别
2020-04-02 17:24:21今天上课的时后老师提到:new开辟变量时,后面加 ( ) ,与不加 ( ) 的效果是一样的。在验证中发现了一些特殊的地方。 全文总结(分析在下面): 调用系统的默认无参构造函数时,是可以实现创造变量时顺便进行初始化... -
Python中类-带括号与不带括号的区别(通俗易懂)
2020-02-12 13:26:41首先类不带括号我们叫赋值,带括号我们叫实例化。 本文主要解决一下几个问题: 什么是赋值? 什么是实例化? 不带括号-赋值 带括号-实例化 什么是赋值? 来者皆客,先上杯茶(例子),你品,你细品: >>... -
kotlin className.() 类名点花括号 T.()
2022-03-24 13:55:23高级函数参数里有个 类名.(),曾经也抄过放到自己的代码里。但是没有深究,一段时间后看的时候又忘记是什么意思了,so 记录一下。 二、先说结论 className.() 在高阶函数中出现,作为高阶函数的一个参数。 表示:一... -
封装一个函数正则匹配获取当前页面中的class类名
2019-06-17 23:00:19这是一道刷到的面试题,感觉在某些框架里也看到过类似的用法,正则匹配类名,id什么的,当然不一定跟我写的一样,如有更好办法,欢迎分享。 function getClass() { var arr = []; var str2 = document.... -
类名 对象名括号
2016-03-01 19:07:06#include using namespace std;...class A { public: A() { cout } }; void main() { A a();//此时编译器把a当初一个函数名,而没有当初一个对象名,所有不调用构造函数。 cin.get(); return; } -
Python 类变量(类名不加括号访问的变量)
2018-03-01 22:51:38起因: 下面一段代码没有达到预期 ...class GlobalVar(): is_init = False def set_init_status(is_init): GlobalVar().is_init = is_init def get_init_status(): return GlobalVar().is_init if ...