_metaclass_=type
#确定使用新式类
class Person:
def setName(self,name):
self.name=name
def getName(self):
return self.name
def greet(self):
print("Hello World!I'm %s."%self.name)
class Secretive:
#从外部无法访问
def __inaccessible(self):
print("Bet you can't see me...")
def accessible(self):
print("The secret message is:")
self.__inaccessible()
foo=Person()
bar=Person()
foo.setName('Luke Skywalker')
bar.setName('Anakin Skywalker')
foo.greet()
bar.greet()
s=Secretive()
s._Secretive__inaccessible()
s.accessible()
#python中类的定义其实就是执行代码块
#类的命名空间
class C:
print('Class C being defined...')
class MemberCounter:
#可供类所有成员or实例访问
members=0
def init(self):
MemberCounter.members+=1
m1=MemberCounter()
m1.init()
print(MemberCounter.members)
m2=MemberCounter()
m2.init()
print(MemberCounter.members)
#Python类继承
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()
f.filter([1,2,3])
s=SPAMFilter()
s.init()
print(s.filter(['SPAM','SPAM','SPAM','Eggs','bacon','SPAM']))
#检查继承
print(issubclass(SPAMFilter,Filter))
print(issubclass(Filter,SPAMFilter))
#查找基类
#__bases__ s双下划线
print(SPAMFilter.__bases__)
print(Filter.__bases__)
#Muti-SuperClasses/Mutiple inheritance
#Python pass是空语句,是为了保持程序结构的完整性。
#超类的顺序:先继承的类中的方法会重写后继承的类中同名的方法
class Calculator:
def calculate(self,expression):
self.value=eval(expression)
def talk(self):
print('Hi,Cover the later superclass\'s talk function')
class Talker:
def talk(self):
print('Hi,my value is',self.value)
class TalkingCalculator(Calculator,Talker):
pass
tc=TalkingCalculator()
tc.calculate('1+2*3')
tc.talk()