파이썬 응용 프로그램에서 호출 한 Vala로 작성된 공유 라이브러리가 필요합니다.python에서 vala 생성자를 호출하는 방법은 무엇입니까? (GObject 내성 검사 사용)
그래서이 Vala 라이브러리는 하나의 함수로 된 두 개의 객체로 만들어졌습니다.
유일한 차이점은 바은 생성자에서 인수를 취하는 반면 Foo은 그렇지 않습니다.
using GLib;
namespace VLibrary {
public class Foo : GLib.Object {
public Foo() {
stdout.printf("VALA:\tcreating object...");
}
public void printThis(string x) {
stdout.printf("print from vala: " +x +"\n");
}
}
public class Bar : GLib.Object {
public Bar(string parameter) {
stdout.printf("vala object created (with parameter)");
}
public void printThis(string x) {
stdout.printf("print from vala: "+x+"\n");
}
}
}
그리고 공유 (.so를) 라이브러리에 valac를 사용하여 그것을 컴파일.
Valac도 .vapi 및 .gir 파일을 생성했습니다.
나는 .gir 파일에서 .typelib 파일을 생성했습니다.
그런 다음이 라이브러리를 사용해야하는 작은 파이썬 응용 프로그램을 작성했습니다.
실행하기 전에 파이썬이 typelib과 라이브러리 파일을 어디에서 찾을 수 있도록 두 개의 환경 변수를 설정해야했습니다. 유형 푸의 객체를 생성
은 export LD_LIBRARY_PATH=.
export GI_TYPELIB_PATH=.
#!/usr/bin/env python
from gi.repository import VLibrary
# Works, but doesnt call the constructor
foo1 = VLibrary.Foo()
# Works
foo1.printThis("FOO !")
# Works, but doesnt call the constructor
bar1 = VLibrary.Bar()
# Works
bar1.printThis("BAR !")
# TypeError: GObject.__init__() takes exactly 0 arguments (1 given)
text = 'hello world'
bar2 = VLibrary.Bar(text)
bar3 = VLibrary.Bar('hello world')
(생성자의 매개 변수) 작동하지만 푸 생성자 (발라 코드)에 인쇄 문은 실행되지 밤은. 나는 바을 입력 의 객체를 생성 할 때
나는 그렇지 않으면 파이썬은 생성자 인수 복용하지 뿌려 생성자에서 문자열을 생략 할 수 있습니다 (이 일을해야에도 불구하고!)를 다른
이 두 개체는 꼭 필요한대로 작동합니다. 인수를 사용하여 객체 메소드 (두 객체)를 호출하면 올바르게 작동합니다.
누군가 내가 잘못한 것을 말할 수 있습니까?
Python에서 Vala 생성자를 호출하는 것은 불가능한 것처럼 보입니다.
개체가 생성되었지만 생성자 코드가 호출되지 않습니다. 당신이 선호하는 경우에, 당신은 당신의 발라 코드에서 GObject-style construction을 사용할 수 있습니다