我有类似
的类结构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
每次初始化派生类实例的字段。
答案 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