我有这个代码:
class Item:
def __init__(self,a):
self.a=a
class Sub(Item):
def __init__(self,a,b):
self.b=b
Item.__init__(self,a)
class SubSub(Sub):
def __init__(self,a,b,c):
self.c=c
Sub.__init__(self,a,b)
obj1=Item(1)
obj2=Sub(1,2)
obj3=SubSub(1,2,3)
Run Code Online (Sandbox Code Playgroud)
现在我要检查,如果obj2和obj3是的是的子类的实例obj1,以及简单的子类Item.
以下是我的理解,我知道我可以使用isinstance()找到,如果obj2是Sub.而且我知道我可以使用issubclass(Sub, Item).但是,假设我不知道上课obj2是什么.
我尝试使用,issubclass(type(obj2),Item)但这不起作用,因为type()返回一个单独的对象,我真的不明白的工作原理.这只是一个问题,虽然我认为这个问题的答案将帮助我解决我遇到的其他一些问题.
此外,我尝试使用一些特殊属性来做到这一点,__class__但我无法弄清楚如何做到这一点.
我试图找出为什么这段代码没有按预期工作。
我想创建一个函数run,它将某个函数作为输入并返回应用于自身的函数。
run::(t1->t2)->t2
run a = a a
Run Code Online (Sandbox Code Playgroud)
包含的类型应该是通用的,因为我希望它适用于任何东西,但是当我尝试并且不确定为什么时,我遇到了无限的类型错误。
让我们说a ='hi'
我想知道a是否是以下任何'hi','yes'或'no'我可以运行
a='hi'
a=='hi' or a=='yes' or a=='no'
>>>True
Run Code Online (Sandbox Code Playgroud)
但是,让我们说这是一个很长的可能性列表,所以我只想说
a='hi'
a==('hi' or 'yes')
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我得到的答案是真的但是当我做这样的事情时:
a==('yes' or 'hi')
>>>False
Run Code Online (Sandbox Code Playgroud)
然后这也很奇怪
a==('yes' and 'hi')
>>>True
Run Code Online (Sandbox Code Playgroud)
但如果我再次切换它们
a==('hi' and 'yes')
>>>False
Run Code Online (Sandbox Code Playgroud)
有人可以解释这里发生的事情