Python访问父构造函数中的派生类属性

时间:2017-06-17 09:24:45

标签: python

我有类似

的类结构
class Parent:
   value_type = (object,)
   def __init__(self, value):
      if not isinstance(value, value_type):
          raise ValueError
      self.value = value

class Derived(Parent):
    value_type = (str,)

当我创建派生类的实例变量为

d = Derived(555)

它不会引发任何错误。 (我需要的行为是,在这种情况下应该引发错误,因为555不是str

有没有办法让父类构造函数使用派生类属性value_type而不是它自己的类属性?

我知道将value_type作为参数传递给__init__函数是一个解决方案,但value_type在整个类中应该是相同的,所以我不想冗余地添加相同的value_type每次初始化派生类实例的字段。

1 个答案:

答案 0 :(得分:3)

public class Player extends Thread { private JButton[] gameBtn = new JButton[16]; Servidor control; Socket connection; ObjectInputStream input; //por no protocolo as msgs serem da classe Object ObjectOutputStream output; int number; char mark; public Player(Socket s, Servidor t, int num ) { connection = s; control = t; number = num; mark = ( num == 0 ? 'X' : 'O' ); try { input = new ObjectInputStream( connection.getInputStream() ); output = new ObjectOutputStream( connection.getOutputStream() ); } catch (IOException e) { e.printStackTrace(); System.exit(1); } } public void run() { try { while( !control.getGameOver() ) { processaMsg(Protocolo.recebe(input)); } connection.close(); } catch( Exception e ) { e.printStackTrace(); System.exit(1); } } public void sendList(List<Integer> gameList) throws IOException { output.writeInt(gameList.size()); for(int i = 0; i < gameList.size(); i++) { output.writeInt(gameList.get(i)); } } 中使用的value_type始终是范围中Parent的值,即您在全局范围内分配value_type的任何内容。

要解决此问题,请使用value_type为已创建的实例分配self.value_type

value_type