标签: super

Python 3.7 中对象与类型的 super().__new__()

super().__new__()在元类中重写时调用__new__包含以下函数签名:

class MyMeta(type):
    
    def __new__(cls, name, bases, classdict):
        clsobj = super().__new__(cls, name, bases, classdict)
Run Code Online (Sandbox Code Playgroud)

然而,当__new__在普通类中重写时,我们有以下内容:

class A:

    def __new__(cls, *a, **kw):
        clsobj = super().__new__(cls)
Run Code Online (Sandbox Code Playgroud)

将任何其他参数传递给super()inA.__new__将导致以下错误:

TypeError: object.__new__() takes exactly one argument (the type to instantiate)
Run Code Online (Sandbox Code Playgroud)

据我所知,在第二种情况下,我们正在处理object.__new__,而在第一种情况下,我们正在处理type.__new__

我的问题是,为什么这些函数签名不同?为什么object.__new__只接受cls

python metaclass super python-3.7

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

如何从超类方法调用python子类方法?

我有以下类型的超类/子类设置:

class SuperClass(object):
    def __init__(self):
        self.do_something() # requires the do_something method always be called

    def do_something(self):
        raise NotImplementedError

class SubClass(SuperClass):
    def __init__(self):
        super(SuperClass, self).__init__() # this should do_something 

    def do_something(self):
        print "hello"
Run Code Online (Sandbox Code Playgroud)

我希望SuperClass init始终调用一个尚未实现的do_something方法.我正在使用python 2.7.也许ABC可以做到这一点,但它有另一种方式吗?

谢谢.

python subclass init abc super

0
推荐指数
1
解决办法
2544
查看次数

Java:从超级构造函数中捕获异常

我尝试编写自己的loader-class来加载一个加密类.

因此我也覆盖了loader(ClassLoader paramClassLoader, File paramFile)调用的构造super(new URL[] { paramFile.toURI().toURL() }, paramClassLoader);.

调用".toUrl()"可以抛出一个MalformedURLException,所以编译以下代码......

public class loader extends URLClassLoader {
    public static void main(String[] args)throws Exception{
        Object localObject = 
            new loader(loader.class.getClassLoader(), 
                          new File(loader.class.getProtectionDomain().getCodeSource()
                              .getLocation().getPath())
                );
         (...)
    }

    private loader(ClassLoader paramClassLoader, File paramFile){   
        super(new URL[] { paramFile.toURI().toURL() }, paramClassLoader);

        if (paramClassLoader == null)
            throw new IllegalArgumentException("Error loading class");
    }
}
Run Code Online (Sandbox Code Playgroud)

错误:

loader.java:123: error: unreported exception MalformedURLException; must be caught or declared to be thrown
super(new URL[] { paramFile.toURI().toURL() …
Run Code Online (Sandbox Code Playgroud)

java constructor exception super

0
推荐指数
1
解决办法
3806
查看次数

Netbeans Variable Inheritance Issue Java

So I've looked around for an answer to this error but nothing exact has come up. I'm new to Java and Netbeans and everything I've done so far has been on BlueJ. When I extend a class to another class the variables and methods should be inherited but I keep getting a variable not found error. This is the super class:

package Runner2D;
import java.awt.*;
public class Block {
    protected boolean power;
    public int width;
    public int height;
    public int …
Run Code Online (Sandbox Code Playgroud)

java inheritance netbeans subclass super

0
推荐指数
1
解决办法
143
查看次数

如何在接口实例中调用super方法?

@Override
public void onBackPressed()
{
    // ...
    dialog.setPositiveButton(getText(R.string.yes), new OnClickListener()
    {
        @Override
        public void onClick(DialogInterface dialog, int which)
        {
            super.onBackPressed();
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

在线给我错误super,我完全理解为什么.但我该如何解决呢?

java methods android interface super

0
推荐指数
1
解决办法
550
查看次数

Java中的finish()和super.finish()之间的区别?

使用finish()super.finish()Java 之间的主要区别是什么?什么时候可以/应该使用一个而不是另一个?

java android super difference

0
推荐指数
1
解决办法
1283
查看次数

Java中的'this'和'super'关键字用法

当我们使用this/super来调用类的任何非静态成员时,JVM会为相应的类创建任何对象.

如果我使用'super'更改超类中的任何非静态变量,这种变化也会反映在子类中.

class A
{
    int i;
}
class Test extends A {
    void test()
    {
        super.i = 10;
        this.i = 8;
        System.out.println("super.i = " + super.i);
        System.out.println("this.i = " + this.i);
    }
    public static void main(String[] args) {
        Test obj = new Test();
        obj.test();
    }
}
Run Code Online (Sandbox Code Playgroud)

java this super

0
推荐指数
1
解决办法
185
查看次数

?超类型Java泛型

我有Java 8泛型问题.

我有以下类层次结构:

Employee is base class
Manager extends Employee
Executive extends Manager
Run Code Online (Sandbox Code Playgroud)

以下第(1)行无法编译:

(1) List<? super Manager> foos1 = new ArrayList<Executive>(); // error
Run Code Online (Sandbox Code Playgroud)

以下第2行和第3行编译好了:

(2) List<? super Manager> foos2 = new ArrayList<Manager>();   
(3) List<? super Manager> foos3 = new ArrayList<Employee>();  
Run Code Online (Sandbox Code Playgroud)

但是,即使我仍然可以像这样添加Executive:

(4) foos2.add(new Manager("Manager!",123));
(5) foos3.add(new Executive("Executive!",1.0,2));
Run Code Online (Sandbox Code Playgroud)

请解释为什么我不能分配变量的逻辑

<? super Manager> = ArrayList<Executive> 
Run Code Online (Sandbox Code Playgroud)

哪个Executive是Manager的超级管理员,但我仍然可以将Executive对象添加到数组列表中?

非常感谢!

java generics wildcard super

0
推荐指数
1
解决办法
446
查看次数

JavaScript中的继承和超级

我在学习JavaScript的第3天.我遇到了这段代码:

class B {
    constructor(name) {
        this.name = name;
    }

    printn() {
        return this.name;
    }
}

class A extends B {
    constructor(name, age) {
        super(name);
        this._age = age;
    }

    get age() {
        return this._age;
    }

    printName(){
        return super.printn();
    }
}

let c = new A("Testing", "37");
Console.log(c.printn());
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释这段代码的作用.什么是构造函数和super()关键字.我相信这是为了继承?我让谷歌找到了一些东西,但这似乎是最简单的例子,但很少有人参考.

我无法使用此代码.

javascript inheritance class super ecmascript-6

0
推荐指数
1
解决办法
362
查看次数

调用super()必须是方法内的第一条语句消息

这是我的基类:

@Service
public class BasicUserManagerService implements UserManager {
    @Autowired
    private UserRepository UserRepository;

    private Logger logger = LoggerFactory.getLogger(UserManagerPasswordController.class);

    @Override
    public void createUser(User User) {
        if (UserRepository.findByEmail(User.getEmail()) != null)
            throw new InvalidDataException("User already registered with this email address");
        UserRepository.save(User);
        logger.info("Created user: {}", User.getEmail());
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图扩展这个类如下:

@Service
public class UserManagerService extends BasicUserManagerService implements UserManager {
    @Override
    public void createUser(User User) {
        super().createUser(User);
    }
}
Run Code Online (Sandbox Code Playgroud)

但我一直得到的错误是对super()的调用必须是构造函数体中的第一个语句.正如你所看到的,我没有构造函数,即使我添加它,我也会得到同样的错误.为什么会发生这种情况,我该如何避免呢?

java super spring-boot

0
推荐指数
1
解决办法
133
查看次数