针对使用isinstance比较boolean和int和isinstance(a,int)这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展c#–AutofacRegisterInstance
针对使用isinstance比较boolean和int和isinstance(a,int)这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展c# – Autofac RegisterInstance vs SingleInstance、hibernate错误:object references an unsaved transient instance - save the transient instance、instanceof isInstance == 和 equals 比较两个有继承关系的对象、instanceof, isinstance,isAssignableFrom 的使用等相关知识,希望可以帮助到你。
本文目录一览:- 使用isinstance比较boolean和int(isinstance(a,int))
- c# – Autofac RegisterInstance vs SingleInstance
- hibernate错误:object references an unsaved transient instance - save the transient instance
- instanceof isInstance == 和 equals 比较两个有继承关系的对象
- instanceof, isinstance,isAssignableFrom 的使用
使用isinstance比较boolean和int(isinstance(a,int))
有人可以给我一个解释,为什么isinstance()
在以下情况下返回True?编写代码时,我期望为False。
print isinstance(True, (float, int))True
我的猜测是,它的Python内部子类为零和一(无论是float还是int)都在用作布尔值时进行评估,但不知道确切的原因。
解决这种情况的最有效方法是什么?我可以使用,type()
但在大多数情况下,这被认为不那么pythonic。
答案1
小编典典由于历史原因,bool
是的子类int
,所以True
是的实例int
。(最初,Python没有布尔类型,返回真值的东西返回1或0。添加它们时bool
,必须将True和False尽可能多地替换为1和0,以实现向后兼容性,因此是子类。
)
解决此问题的正确方法取决于您所认为的问题所在。
- 如果您不想
True
再成为一个int
太糟糕了。那不会发生。 如果要检测布尔值并以不同于其他int的方式处理它们,则可以执行以下操作:
if isinstance(whatever, bool):# special handling
elif isinstance(whatever, (float, int)):
# other handling如果要检测其特定类恰好是
float
或int
,拒绝子类的对象,则可以执行以下操作:if type(whatever) in (float, int):# Do stuff.
如果要检测所有浮点数和整数,则已经在执行此操作。
c# – Autofac RegisterInstance vs SingleInstance
IProductRepositoryProxy ProductDataServiceProviderInstance = new ServiceProductDataProvider(); builder.RegisterInstance(ProductDataServiceProviderInstance).As<IProductRepositoryProxy>();
VS
builder.RegisterType<ServiceProductDataProvider>().As<IProductRepositoryProxy>().InstancePerRequest();
我从前员工那里看到这个代码,想知道这个人是否想注册一个.SingleInstance()行为.
builder.RegisterType<ServiceProductDataProvider>().As<IProductRepositoryProxy>().SingleInstance();
RegisterInstance的ServiceProductDataProvider的手动新增与Register的不同.SingleInstance()?
解决方法
Is the manual newing-up of the ServiceProductDataProvider with RegisterInstance not the same as the Register .SingleInstance() ??
RegisterInstance允许您在AutoFac中注册一个实例.
RegisterInstance和RegisterType SingleInstance方法的区别在于RegisterInstance方法允许您注册一个非Autofac构建的实例.
但是这两种解决方案都将导致在Autofac中注册单例.
顺便说一句,两个注册在下面的代码示例中是等效的
var instance = GetInstanceFromSomewhere(); builder.RegisterInstance<IService>(instance); builder.Register(c => instance).As<IService>().SingleInstance();
hibernate错误:object references an unsaved transient instance - save the transient instance
场景如下,在有父子表的时候,同时save父子表的数据,子表数据没有更新
在保存的时候发现对象含有其他空的对象,所以会报错。
解决办法:
设置父子表的级联保存
设置字表的cascade为all
如下:
@OneToMany(mappedBy="businessTripNew",orphanRemoval=true,fetch=FetchType.LAZY)
@OrderBy("seq asc")
@Cascade(org.hibernate.annotations.CascadeType.ALL)
private Set<BusinessTripScheduleDetail> schedules;// 日程安排
instanceof isInstance == 和 equals 比较两个有继承关系的对象
package com.zcc.instanceofTest;
/*
* A instanceof B
* A isInstance(B)
* 通俗讲就是在问:A是B类吗?或者是:A 是B类的派生类吗?
* instanceof 和 isInstance 保留的继承的概念 而 == 和equals 是比较实际的类对象
*做个例子:public class Son extends Father
*/
public class TestIntanceOf {
public static void test(Object obj){
System.out.println("obj 是"+obj.getClass()+"类型");
System.out.println("obj 是 Father类型:"+(obj instanceof Father));
System.out.println("obj 是 Son 类型:"+(obj instanceof Son));
System.out.println("obj 的类型是Father:"+Father.class.isInstance(obj));
System.out.println("obj 的类型是Son:"+Son.class.isInstance(obj));
System.out.println("obj.getClass() == Father.class:"+(obj.getClass() == Father.class ));
System.out.println("obj.getClass() == Son.class:"+(obj.getClass() == Son.class));
System.out.println("obj.getClass().equals(Father.class):"+(obj.getClass().equals(Father.class)));
System.out.println("obj.getClass().equals(Son.class):"+(obj.getClass().equals(Son.class)));
/**
* 一下是打印输出:
* obj 是class com.zcc.instanceofTest.Father类型
*obj 是 Father类型:true
*obj 是 Son 类型:false
*obj 的类型是Father:true
*obj 的类型是Son:false
*obj.getClass() == Father.class:true
*obj.getClass() == Son.class:false
*obj.getClass().equals(Father.class):true
*obj.getClass().equals(Son.class):false
*
*obj 是class com.zcc.instanceofTest.Son类型
*obj 是 Father类型:true
*obj 是 Son 类型:true 次句证明 instanceof是保留了继承关系的
*obj 的类型是Father:true
*obj 的类型是Son:true 次句证明 isInstance是保留了继承关系的
*
*obj.getClass() == Father.class:false // 次句证明 == 是单纯的比较类型 不保留继承关系
*obj.getClass() == Son.class:true
*obj.getClass().equals(Father.class):false 次句证明 equals 是单纯的比较类型 不保留继承关系
*obj.getClass().equals(Son.class):true
*/
}
public static void main(String[] args) {
test(new Father());
test(new Son());
}
}
package com.zcc.instanceofTest;
/**
* 通过上面的例子我们清晰的知道来四个比较类是否相等的方法的区别
* 那么用实现关系 再次用四种方式比较会有什么结果呢?
* 例如:
* public class Dog implements Animal
* @author changzeng
*
*/
public class TestInstanceof2 {
public static void test(Object obj){
System.out.println("obj 是"+obj.getClass()+"类型");
System.out.println("obj 是 Animal类型:"+(obj instanceof Animal));
System.out.println("obj 是 Dog 类型:"+(obj instanceof Dog));
System.out.println("obj 的类型是Animal:"+Animal.class.isInstance(obj));
System.out.println("obj 的类型是Dog:"+Dog.class.isInstance(obj));
System.out.println("obj.getClass() == Animal.class:"+(obj.getClass() == Animal.class ));
System.out.println("obj.getClass() == Dog.class:"+(obj.getClass() == Dog.class));
System.out.println("obj.getClass().equals(Animal.class):"+(obj.getClass().equals(Animal.class)));
System.out.println("obj.getClass().equals(Dog.class):"+(obj.getClass().equals(Dog.class)));
/*
*
* obj 是class com.zcc.instanceofTest.Dog类型
*obj 是 Animal类型:true
*obj 是 Dog 类型:true
*obj 的类型是Animal:true
*obj 的类型是Dog:true
*上面输出证明 instanceof 和 isInstance 也保留来实现关系
*obj.getClass() == Animal.class:false
*obj.getClass() == Dog.class:true
*obj.getClass().equals(Animal.class):false
*obj.getClass().equals(Dog.class):true
*上面的输出证明 == 和 equals 也没有保留实现关系
*/
}
public static void main(String[] args) {
test(new Dog());
}
}
instanceof, isinstance,isAssignableFrom 的使用
(1) instanceof运算符 只被用于对象引用变量,检查左边的被测试对象 是不是 右边类或接口的 实例化。如果被测对象是null值,则测试结果总是false。
(2)Class类的isInstance(Object obj)方法,obj是被测试的对象,如果obj是调用这个方法的class或接口 的实例,则返回true。这个方法是instanceof运算符的动态等价。
(3)Class类的isAssignableFrom(Class cls)方法,如果调用这个方法的class或接口 与 参数cls表示的类或接口相同,或者是参数cls表示的类或接口的父类,则返回true。
今天关于使用isinstance比较boolean和int和isinstance(a,int)的讲解已经结束,谢谢您的阅读,如果想了解更多关于c# – Autofac RegisterInstance vs SingleInstance、hibernate错误:object references an unsaved transient instance - save the transient instance、instanceof isInstance == 和 equals 比较两个有继承关系的对象、instanceof, isinstance,isAssignableFrom 的使用的相关知识,请在本站搜索。
本文标签: