相关疑难解决方法(0)

继承Python中的实例

在Python中,我想直接从Parent类的实例构造一个Child类的实例.例如:

A = Parent(x, y, z)
B = Child(A)
Run Code Online (Sandbox Code Playgroud)

这是我认为可行的黑客行为:

class Parent(object):

    def __init__(self, x, y, z):
        print "INITILIZING PARENT"
        self.x = x
        self.y = y
        self.z = z

class Child(Parent):

    def __new__(cls, *args, **kwds):
        print "NEW'ING CHILD"
        if len(args) == 1 and str(type(args[0])) == "<class '__main__.Parent'>":
            new_args = []
            new_args.extend([args[0].x, args[0].y, args[0].z])
            print "HIJACKING"
            return Child(*new_args)
        print "RETURNING FROM NEW IN CHILD"
        return object.__new__(cls, *args, **kwds)
Run Code Online (Sandbox Code Playgroud)

但是当我跑步的时候

B = Child(A) 
Run Code Online (Sandbox Code Playgroud)

我明白了:

NEW'ING CHILD  
HIJACKING  
NEW'ING CHILD  
RETURNING FROM NEW …
Run Code Online (Sandbox Code Playgroud)

python inheritance overloading instance

11
推荐指数
3
解决办法
7672
查看次数

将方法动态附加到使用swig生成的现有Python对象?

我正在使用Python类,并且我没有对其声明的写入权限.如何__str__在不修改类声明的情况下将自定义方法(如)附加到从该类创建的对象中?

编辑:谢谢你的所有答案.我尝试了所有这些,但他们没有解决我的问题.这是一个最小的例子,我希望能澄清这个问题.我使用swig来包装C++类,目的是覆盖swig模块返回的对象__str__功能.我使用cmake来构建示例:

test.py

import example

ex = example.generate_example(2)

def prnt(self):
    return str(self.x)

#How can I replace the __str__ function of object ex with prnt?
print ex
print prnt(ex)
Run Code Online (Sandbox Code Playgroud)

example.hpp

struct example
{
    int x;
};

example generate_example(int x);
Run Code Online (Sandbox Code Playgroud)

example.cpp

#include "example.hpp"
#include <iostream>

example generate_example(int x)
{
    example ex;
    ex.x = x;
    return ex;
}

int main()
{
    example ex = generate_example(2);
    std::cout << ex.x << "\n";
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

example.i

%module example

%{ …
Run Code Online (Sandbox Code Playgroud)

python methods class dynamic

9
推荐指数
1
解决办法
4084
查看次数

标签 统计

python ×2

class ×1

dynamic ×1

inheritance ×1

instance ×1

methods ×1

overloading ×1