为啥Python调用方法,有的前面加类名,有的不加?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥Python调用方法,有的前面加类名,有的不加?相关的知识,希望对你有一定的参考价值。

Python中,导入模块,调用里面的方法时,好像有2种,①模块名.方法名(),如math.sin();②对象名.方法名(),如pandas里面的mydata.info(),这里的mydata是创建的一个对象。为什么有的要模块名,有的用对象名?

答: Python使用面向对象的方法进行编程时,确实有两种调用方法。第一,当被调用的方法是静态方法,那么这个时候无须实例化对象,直接按照类名.函数名格式即可,如math.sin(),在该函数的底层实现当中,使用了@staticmethod声明静态方法,我的理解是这样的,当某个方法经常被使用时,把它声明成静态方法会方便一些;第二,当被调用方法是非静态方法时,则必须先实例化一个对象,再进行方法调用。希望能够帮助到你。

例子

参考技术A ①模块名.方法名() 这是因为这个方法用@staticmethod修饰,属于类方法
②对象名.方法名() 这是因为方法是实例方法,必须通过对象才能调用
比如person类的run方法
p=Person(101,"张三")
p.run();
这就是第二种情况了。

C++:调用无参数的构造函数为啥不加括号

如图加了括号之后报错内容是什么意思

1、不使用初始化语句;
2、不使用延时语句;
3、不使用循环次数不确定的语句,如:forever,while等;
4、尽量采用同步方式设计电路;
5、尽量采用行为语句完成设计;
6、always过程块描述组合逻辑,应在敏感信号表中列出所有的输入信号;
7、所有的内部寄存器都应该可以被复位;
8、用户自定义原件(UDP元件)是不能被综合的。
一:基本
Verilog中的变量有线网类型和寄存器类型。线网型变量综合成wire,而寄存器可能综合成WIRE,锁存器和触发器,还有可能被优化掉。
二:verilog语句结构到门级的映射
1、连续性赋值:assign
连续性赋值语句逻辑结构上就是将等式右边的驱动左边的结点。因此连续性赋值的目标结点总是综合成由组合逻辑驱动的结点。Assign语句中的延时综合时都将忽视。
2、过程性赋值:
过程性赋值只出现在always语句中。
阻塞赋值和非阻塞赋值就该赋值本身是没有区别的,只是对后面的语句有不同的影响。
建议设计组合逻辑电路时用阻塞赋值,设计时序电路时用非阻塞赋值。
过程性赋值的赋值对象有可能综合成wire, latch,和flip-flop,取决于具体状况。如,时钟控制下的非阻塞赋值综合成flip-flop。
过程性赋值语句中的任何延时在综合时都将忽略。
建议同一个变量单一地使用阻塞或者非阻塞赋值。
3、逻辑操作符:
逻辑操作符对应于硬件中已有的逻辑门,一些操作符不能被综合:===、!==。
4、算术操作符:
Verilog中将reg视为无符号数,而integer视为有符号数。因此,进行有符号操作时使用integer,使用无符号操作时使用reg。
参考技术A 使用无参构造函数创建对象时,不应该在对象名后面加上括号。这是规矩,你遵守就好了。追问

那报错的这句话是什么意思呢?

追答

Clock c2();这句把括号去掉就好了

参考技术B 如果是Clock c2();,则是在进行函数的声明。函数名为c2,不需要参数,返回类型为Clock。 参考技术C 如果是Clock c2();,则是在进行函数的声明。函数名为c2,不需要参数,返回类型为Clock。

以上是关于为啥Python调用方法,有的前面加类名,有的不加?的主要内容,如果未能解决你的问题,请参考以下文章

Python调用函数问题?

为啥onclick=""引号中放置的方法后面有时候加;有时候不加啊

VS c++2005中头文件有的为啥必须加.h比如malloc

Java基础(42):Java中主类中定义方法加static和不加static的区别(前者可以省略类名直接在祝方法调用,后者必须先实例化后用实例调用)

c#里为啥有的使用时函数需要new一个对象而有的不用?为啥不直接调用就好?

Python 学习日记7