callable 判断函数是否可调用
_metaclass_=type
class Person:
def setName(self,name):
self.name=name
def getName(self):
return self.name
foo=Person()
foo.setName('syt')
#print(foo.getName())
class Secret:
def __inaccessible(self):
print("can not see")
def accessible(self):
print('see')
self.__inaccessible()
x=Secret()
#x.__inaccessible()
#x.accessible()
#x._Secret__inaccessible()
class MemberCounter:
member=0
def init(self):
MemberCounter.member+=1
m1=MemberCounter()
m1.init()
m1.member=33
m2=MemberCounter()
m2.init()
#print(MemberCounter.member,m1.member,m2.member)
#指定超类
class Filter:
def init(self):
self.blocked=[]
def filter(self,sequence):
return [x for x in sequence if x not in self.blocked]
class SPAMFilter(Filter):
def init(self):
self.blocked=['SPAM']
f=Filter()
f.init()
#print(f.filter([1,2,3]))
s=SPAMFilter()
s.init()
#print(s.filter(['SPAM','ss','SPAM']))
#查看一个类是否是另一个的子类
print(issubclass(SPAMFilter,Filter))
#查看某个类的基类
print(SPAMFilter.__bases__)
#检查一个对象是否是一个类的实例
print(isinstance(s,SPAMFilter))
print(s.__class__)
#多个超类
class Calculator:
def cal(self,expression):
self.value=eval(expression)
class Talker:
def talk(self):
print('my value is ',self.value)
class TalkCal(Calculator,Talker):
pass
tc=TalkCal()
tc.cal('1+2+3')
tc.talk()
#检查方法是否存在
print(hasattr(tc,'talk'))