精华内容
下载资源
问答
  • C调用python正确方法

    千次阅读 多人点赞 2019-04-24 19:06:15
    C或C++调用python一般都可以使用python自带的库...首先声明,以下的方法是有问题的,有问题的地方我会使用红字标出 注: 下述所有导入方法在导入失败时不会报错, 只会返回空指针. 第一步是导入.py文件: 使用Py...

     

    C或C++调用python一般都可以使用python自带的库完成,首先添加python.h的头文件,链接时加上对应的库即可。

    但是在C/C++程序中使用到python的类时会遇到很多坑,网上搜会得到很多相似的方法如下所示

    首先声明,以下的方法是有问题的,有问题的地方我会使用红字标出

    注: 下述所有导入方法在导入失败时不会报错, 只会返回空指针.

    第一步是导入.py文件:

    1. 使用PyObject* pModule来存储导入的.py文件模块, 调用的方法是PyImport_ImportModule(path):  PyObject* pModule = PyImport_ImportModule("testpy"); 
    2. 使用PyObject* pDict来存储导入模块中的方法字典, 调用的方法是PyModule_GetDict(module):  PyObject* pDict = PyModule_GetDict(pModule); 

    这样就完成了.py文件的导入.

    第二步是导入已导入模块中的方法或类:

    1. 获取方法, 调用的方法是PyDict_GetItemString(dict, methodName): PyObject* pFunHi = PyDict_GetItemString(pDict, "sayhi"); 
    2. 获取类, 调用的方法同上, 注意红体部分的字符串对应于.py文件中的类/方法名:  PyObject* pClassSecond = PyDict_GetItemString(pDict,"Second"); 

    第三步是使用导入的方法或类:

    1. 使用方法, 调用PyObject_CallFunction(pFunc, "s", args)即可:  PyObject_CallFunction(pFunHi, "s", "lhb"); 
    2. 使用类构造对象, 调用PyInstance_New(pClass, NULL, NULL)即可:  PyObject* pInstanceSecond = PyInstance_New(pClassSecond, NULL, NULL); , 注意其中的pClassSecond为第二步.2中获取的类指针
    3. 使用类对象的方法, 调用PyObject_CallMethod(pInstance, methodname, "O", args)即可:  PyObject_CallMethod(pInstanceSecond,"invoke", "O", pInstancePerson); 
    4. 上述调用中的"s"和"O"代表的是参数列表的类型, 我们可以在 Py_BuildValue 找到所有的类型, 本文最后也附了此表.

    PyInstance_New是python2使用的函数,python3则使用新的函数PyInstanceMethod_New,国内很多文章都认为这两个函数返回的是类的实例对象,其实不然,它们返回的是该类的构造函数对象

    按照上面文章的步骤做在不涉及修改类的成员变量时是没有问题的,如果有python类

    class Test:
        def __init__(self):
            self.i = 1
            print("init!")
    
        def modify(self):
            self.i+=1
    
        def do(self):
            print(self.i)

    如果使用上面的方法使用这个类,调用do方法是不会有问题的,可以成功打印,但是如果调用modify则会报错,PyErr_Print打印错误信息则会提示i不存在。

    并且在PyInstance_New或PyInstanceMethod_New时并不会打印init!,说明构造函数根本没有被调用。

    正确的调用方式则应该是

    PyObject* pConstruct = PyInstanceMethod_New(pClass);
    PyObject* pIns = PyObject_CallObject(pConstruct,nullptr);
    PyObject_CallMethod(pIns,"modify", nullptr); 
    PyObject_CallMethod(pIns,"do", nullptr); 

    使用PyInstanceMethod_New获得构造函数后才能构造对象,并且调用时不需要传递自身。

    展开全文
  • 1.wait和notify仅仅是普通方法或同步工具,更重要的是它们是Java中两个线程之间的通信机制 。对语言设计者而言,如果能通过Java关键字(例如synchronized)实现此通信机制,同时又要确保这个机...

    分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net

    以下是我认为有意义的一些想法:

    1.wait和notify不仅仅是普通方法或同步工具,更重要的是它们是Java中两个线程之间的通信机制 。对语言设计者而言,如果不能通过Java关键字(例如synchronized)实现此通信机制,同时又要确保这个机制对每个对象可用,那么Object类则是正确的声明位置。记住同步和等待、通知是两个不同的领域,不要把它们看成是相同的或相关的。同步是提供互斥并确保Java类的线程安全,而wait和notify是两个线程之间的通信机制。

    2.每个对象都可上锁,这是在Object类而不是Thread类中声明wait和notify的另一个原因。

    3.在Java中为了进入代码的临界区,线程需要锁定并等待锁定,他们不知道哪些线程持有锁,而只是知道锁被某个线程持有,并且他们应该等待取得锁,而不是去了解哪个线程在同步块内,并请求它们释放锁定。

    4.Java是基于监视器的思想,在Java中,所有对象都有一个监视器。

    线程在监视器上等待,为执行等待,我们需要2个参数:

    • 一个线程
    • 一个监视器(任何对象)

    在Java设计中,线程不能被指定,它总是运行当前代码的线程。但是,我们可以指定监视器(这是我们称之为等待的对象)。这是一个很好的设计,因为如果我们可以让任何其他线程在所需的监视器上等待,这将导致“入侵”,导致在设计并发程序时会遇到困难。请记住,在Java中,所有在另一个线程的执行中侵入的操作都被弃用了(例如stop方法)。

    展开全文
  • 生成注释 1.打开File -> Settings 2.Editor -> File and Code Templates -> Files -> Class 3.效果图 网上很多都是在Includes的File Header里面添加,在这里面添加还需要自己去移动下鼠标,...

    生成类注释


    1.打开File -> Settings
    2.Editor -> File and Code Templates -> Files -> Class 

    è¿éåå¾çæè¿°
    3.效果图 

    è¿éåå¾çæè¿°

    网上很多都是在Includes的File Header里面添加,在这里面添加还需要自己去移动下鼠标,然后再去操作键盘,再去写description,,直接在创建类的时候就添加好description不更快吗?

    在此添加的话你每次创建类的时候会弹两次框,第二次是让你输入description的内容了,so, 这就是最优的方法
    同理,也可以在这儿为你的Interface,Enum添加上注释

    生成类注解模板
     

    /**
    * @program: ${PROJECT_NAME}
    *
    * @description: ${description}
    *
    * @author: Mr.Wang
    *
    * @create: ${YEAR}-${MONTH}-${DAY} ${HOUR}:${MINUTE}
    **/

    生成方法注释


    1.打开File -> Settings
    2.Editor -> Live Templates -> 点击右边加号为自己添加一个Templates Group -> 然后选中自己的Group再次点击加号添加Live Templates 

    è¿éåå¾çæè¿°

    è¿éåå¾çæè¿°

    3.然后设置自己喜欢的快捷键 在Abbreviation里面 记得在Applicable in 里面勾选,起码也要勾选class 

    è¿éåå¾çæè¿°

    4.然后在Edit variables里面添加参数和返回值的自动取值 

    è¿éåå¾çæè¿°

    Expression里面选择就是了 

    è¿éåå¾çæè¿°
    5.然后再你的方法上面直接输入/ + 你设置的Abbreviation快捷键 + tab键就直接生成了 (我设置的是/+ a + tab) 
    效果图: 

    è¿éåå¾çæè¿°

    里面的参数和返回值都是根据你在Edit variables里面添加的自动生成的,

    生成方法注解模板

    ** 
    * @Description: $description$ 
    * @Param: $params$ 
    * @return: $returns$ 
    * @Author: Mr.Wang 
    * @Date: $date$ 
    */ 

    注意,这个和类注解模板有点不一样,这个是用两个$$ ,这个的作用就是生成后光标直接跳到当前位置,这样也可以直接去输入description的内容了

    对于 Live Templates只能说真的很强大,你平常用的sout ,psvm什么都是里面的,大家可以自行百度一下学习一下。
    --------------------- 
    作者:is_Min 
    来源:CSDN 
    原文:https://blog.csdn.net/qq_34581118/article/details/78409782 
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • PHP接口interface的正确使用方法

    万次阅读 2018-08-14 09:44:46
    今天在看zend Framework框架,发现它里面用到了很多的interface定义的,好像对php接口使用不是很理解,通过查阅资料,整理了有些关于interface的正确使用方法: 1、接口的定义:  接口:一种成员属性为抽象的...

    今天在看zend Framework框架,发现它里面用到了很多的interface定义的类,好像对php接口类使用不是很理解,通过查阅资料,整理了有些关于interface的正确使用方法:
    1、接口的定义:
     接口:一种成员属性为抽象的特殊抽象类,在程序中同为规范的作用
    2、其实他们的作用很简单,当有很多人一起开发一个项目时,可能都会去调用别人写的一些类,那你就会问,我怎么知道他的某个功能的实现方法是怎么命名的呢,这 个时候PHP接口类interface就起到作用了,当我们定义了一个接口类时,它里面的方式是下面的子类必须实现的,比如 :
    interface Shop  
    {  
    public function buy($gid);  
    public function sell($gid);  
    public function view($gid);  
    }    
    我声明一个shop接口类,定义了三个方法:买(buy),卖(sell),看(view),那么继承此类的所有子类都必须实现这3个方法少一个都 不行,如果子类没有实现这些话,就无法运行。实际上接口类说白了,就是一个类的模板,一个类的规定,如果你属于这类,你就必须遵循我的规定,少一个都不 行,但是具体你怎么去做,我不管,那是你的事,如:
     

     
    1. class BaseShop implements Shop  
    2. {  
    3. public function buy($gid)  
    4. {  
    5. echo('你购买了ID为 :'.$gid.'的商品');  
    6. }  
    7. public function sell($gid)  
    8. {  
    9. echo('你卖了ID为 :'.$gid.'的商品');  
    10. }  
    11. public function view($gid)  
    12. {  
    13. echo('你查看了ID为 :'.$gid.'的商品');  
    14. }  
    15. }  

    结论 : PHP接口类interface就是一个类的领导者,指明方向,子类必须完成它指定方法。这样不同的开发者就不要去了解别人怎么命名相应的方法。
    3、php中使用接口(interface)实现多重继承: 
    我们都知道PHP中的类(class)是单继承的,那是不是就没有办法实现多重继承了呢?答案是否定的.我们可以通过其它特殊的方式实现类的多重 继承,比如使用接口(interface)实现,只要把类的特征抽象为接口,并通过实现接口的方式让对象有多重身份,通过这样就可以模拟多重继承了。
    下面是一个用接口(interface)实现多重继承的例子,源代码如下: 
    <?php 
    interface UserInterface{ //定义User的接口 
    function getname(); 

    interface TeacherInterface{ //teacher相关接口 
    function getLengthOfService(); 

    class User implements UserInterface { //实现UserInterface接口 
    private $name = "tom"; 
    public function getName(){ 
    return $this->name; 


    class Teacher implements TeacherInterface { //实现TeacherInterface接口 
    private $lengthOfService = 5; // 工龄 
    public function getLengthOfService(){ 
    return $this->lengthOfService; 


    // 继承自User类,同时实现了TeacherInterface接口. 
    class GraduateStudent extends User implements TeacherInterface { 
    private $teacher ; 
    public function __construct(){ 
    $this->teacher = new Teacher(); 

    public function getLengthOfService(){ 
    return $this->teacher->getLengthOfService(); 


    class Act{ 
    //注意这里的类型提示改成了接口类型 
    public static function getUserName(UserInterface $_user){ 
    echo "Name is " . $_user->getName() ."<br>"; 

    //这里的类型提示改成了TeacherInterface类型. 
    public static function getLengthOfService(TeacherInterface $_teacher){ 
    echo "Age is " .$_teacher->getLengthOfService() ."<br>"; 


    $graduateStudent = new GraduateStudent(); 
    Act::getUserName($graduateStudent); 
    Act::getLengthOfService($graduateStudent); 
    //结果正如我们所要的,实现了有多重身份的一个对象. 
    ?> 
    示例运行结果如下: 
    Name is tom 
    Age is 5 
    4、接口类和抽象类的区别
      抽象类 :1.类中至少有一个抽象方法
                  2.前面加abstract
      接口: 1.成员属性为常量const
             2.前面不用加abstract
             3.类中全部为抽象方法,接口抽象方法为public
    5、接口类和抽象类 共同点:
          1.本身不能被实例化,必须继承或者引用
          2.继承和引用后,抽象方法必须重载才能实例化
         关键字 interface.引用关键字 implements

    展开全文
  • 今天写STL中 rb_tree 的时候意外的发现一个问题:模板的模板成员函数能在定义外部进行特化,特化必须放在定义内,否则将报错:error C2244: “X::test”: 无法将函数定义与现有的声明匹配 经过写如下的...
  • 【含答案】第二章 类与对象--2.2-1-类声明与对象创建 (1)单选题 类与对象的关系是: A 类是对象的抽象 B 对象是类的抽象 C 对象是类的子类 D 类是对象的具体实例 (2)单选题 关于Java中类的声明,下面哪个...
  • 在java 中,当我们子类要重写父类中的方法,如果父类的方法有异常声明,那么子类重写这个方法时候,所要声明的异常应该比父类的大。只能是小等,或者可以没有。原因如下。  假如我们自定意义一个异常:  ...
  • 在java 中,当我们子类要重写父类中的方法,如果父类的方法有异常声明,那么子类重写这个方法时候,所要声明的异常应该比父类的大。只能是小等,或者可以没有。原因如下。 假如我们自定意义一个异常: ...
  • 完整的类声明(incomplete class declarations ) 问题 和 解答   两个类放入一个文件时, 如果包含内联函数, 及友元(friend)类, 则函数放置的顺序尤为重要, 类的前置声明(class forward declaration)也需要注意. ...
  • 一、类声明 //类是一种用户自定义类型,声明形式: class 类名称 {  public:  公有成员(外部接口)  private:  私有成员  protected:  保护成员 }; 在关键字public后面声明,它们是类与外部的接口,任何外部...
  • 事务管理代码没有了,脑酸了,手痛了,一口气全配上了事务;轻量级,测试起来也简单,嘿!”。不管从哪个角度看,轻量级声明式事务都是一件解放生产力的大好事。所以,我们“一直用它”。    不过,最近...
  • 声明、定义与初始化

    千次阅读 2012-01-05 09:46:24
    声明而尚未定义的称为完全 完全只能用于定义指针、引用、参数类型、返回值类型,能定义对象class Mat; //求定义的 Mat Test(Mat& B);//正确 Mat *pMat;//正确 Mat mt;//错误,如果在任何位置(即使...
  • A一个可以实现多个接口,类似于多重继承 B.接口没有构造函数 C.接口可以继承 D.接口所包含的方法既可以有实现,也可以没有实现。 可以详细解释一下吗??谢谢。
  • 声明式事务回滚@Transactional的避坑正确使用

    万次阅读 多人点赞 2018-07-01 21:51:45
    下面我来说下关于Spring的声明式事务@Transaction的坑,我想最大的坑应该还是代理事务生效的问题,下面放个链接,以免别人问。https://blog.csdn.net/weixin_41485592/article/details/80031597下面我要说的又是一...
  • Python静态方法类方法深度总结

    万次阅读 多人点赞 2017-06-17 22:46:40
    Python静态方法类方法深度总结
  • Java声明详解

    万次阅读 多人点赞 2018-06-20 17:50:20
    本篇博客为原创博客,转载请注明出处!有什么不对或去需要改进的地方,请指出。...二、类声明语法 [修饰符] [static] [final] [abstract] [strictfp] class 类名 [extends 父类名] [implements 接口名] { ...
  • 面试题:下面哪个对声明是错误的? A、class MyClass extends MySuperClass1,MySuperClass2{} B、public class MyClass{} C、abstract class MyClass implements YourInterface1,YourInterface2{} D、private...
  • A:static成员变量在对象构造时候生成 ...答案:c 解释,(1)的static成员变量属于该抽象,需要在定义时初始化,可以在对象的构造函数中初始化。(2) static成员函数在对象成员函数中可以调用,同属于
  • 下面重载乘法运算符的函数原型声明正确的是: 正确答案: A B D 你的答案: D (错误) MyClass operator *(double ,MyClass); MyClass operator *(MyClass ,MyClass); MyClass operator *...
  • 面向对象——抽象与抽象方法

    千次阅读 2020-04-13 09:26:04
    如果一个类不与具体的食物相联系,而只表达一种抽象的概念,仅是作为其派生的一个基类,这样的就是派生,在抽象中,声明抽象声明抽象方法是,如果加上abstract关键字则为抽象方法。abstract 修饰符可...
  • 会使这个成为一个抽象,这个能生成对象实例,但可以做为对象变量声明的类型,也就是编译时类型,抽象就像当于一的半成品,需要子类继承并覆盖其中的抽象方法。 2,abstract修饰方法 会使这个方法变成...
  • 抽象和抽象方法定义及讲解?

    千次阅读 2019-02-26 17:26:23
    首先说抽象: (1)抽象只能作为其他的基类,它能直接实例化,对抽象类不能使用new 操作符。 (2)抽象中可以包含抽象成员,但非抽象可以。...(1)抽象方法必须声明在抽象中。 ...
  • 错误:此声明中没有存储或类型说明符 情况描述: 今天在写程序的时候遇到了这个错误,原因很简单,...//正确声明方法 int a::max( int A , int B )//正确定义的方法 { if ( A &amp;amp;amp;amp;...
  • A) final是java中的修饰符,可以修饰、接口、抽象方法和属性 B) final修饰的肯定能被继承 C) final修饰的方法不能被重载 D) final修饰的变量允许被再次赋值 一、final关键字可以用来修饰、...
  • 事务管理代码没有了,脑酸了,手痛了,一口气全配上了事务;轻量级,测试起来也简单,嘿!”。不管从哪个角度看,轻量级声明式事务都是一件解放生产力的大好事。所以,我们“一直用它”。 不过,最近的一个项目...
  • Java中的构造方法

    万次阅读 多人点赞 2016-10-20 23:17:50
    constructor;构造函数。在创建对象的时候,对象成员可以由构造函数方法进行初始化。new对象时,都是用构造...构造方法没有返回类型,也能定义为void,在方法名前面不声明方法类型。 构造方法不能作用是完成对象的
  • 玩转Python的(私有)属性与方法的使用

    千次阅读 多人点赞 2018-08-16 20:38:52
    1.Python中属性:属性 ,实例属性,私有属性的使用 在Python中的属性分为:属性和对象(实例)属性: 1.属性就是属于所有,可以直接用类名.属性名直接调用,的属性在内存中只有一份。实例属性就是在__...
  • C++:如何正确的使用接口

    千次阅读 多人点赞 2018-07-02 18:22:05
    前一篇文章中讲过C++中如何正确的定义接口,那定义好的接口如何正确使用?本篇将细细说说。 提供接口与实现 首先,声明一个接口: // circle.h // 圆的接口 class Circle { public: virtual ~Circle() {}...
  • 学习访问器(存取(getter、setter))方法声明使用和方法调用更多精彩...学会正确调用无参的或者有参的方法 学会嵌套调用方法 访问器方法在第五节中展示的getter、setter方法我们也叫访问器方法(迅速温故:getter方法

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 449,290
精华内容 179,716
关键字:

关于类方法的声明不正确的是