python 对象 类


python 对象 类

创建自己得类
>>> 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
 
>>> xiaoq=Person()
>>> xiaoq.setName("qiaochao")
>>> xiaoq.greet()
hello world ~ I'm qiaochao.

定义私有方法或者特性,只要在前面加上双下划线即可
>>> class PP:
 def setName(self,name):
  self.name=name
 def getName(self):
  return self.name
 def __greet(self):
  print 'hello world ~ I\'m %s.' % self.name
 def meet(self):
  self.__greet()
   
>>> p=PP()
>>> p.greet()
Traceback (most recent call last):
  File "<pyshell#369>", line 1, in <module>
    p.greet()
AttributeError: PP instance has no attribute 'greet'

>>> p.setName("qiao")
>>> p.meet()     -----------------  自己内部可以调用私有方法
hello world ~ I'm qiao.

类的内部定义中,所有以双下划线开始的名字都被“翻译”成前面加上单下划线和类名的形式,实际上还是能在类外访问私有方法(尽管不应该这么做)
>>> p._PP__greet()
hello world ~ I'm qiao.

-----------------------------------------------------------------------------------

指定超类

>>> 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):     ------------------  SPAMFilter 是Filter的子类
 def init(self):    -------------  重写init 方法
  self.blocked=['SPAM']
 
>>> f=Filter()
>>> f.init()
>>> f.filter([1,2,3])
[1, 2, 3]
>>> s=SPAMFilter()
>>> s.init()
>>> s.filter(['SPAM','SPAM','asd','asdx','SPAM'])
['asd', 'asdx']

issubclass 函数
查看一个类是否是另一个类的子类,可以使用内建函数issubclass函数
>>> issubclass(SPAMFilter,Filter)
True
>>> issubclass(Filter,SPAMFilter)
False

要想知道已知类的基类(们),可以直接使用它的特殊特性__bases__
>>> SPAMFilter.__bases__
(<class __main__.Filter at 0x0000000002EE92E8>,)
>>> Filter.__bases__
()

isinstance方法检查一个对象是否为一个类的实例
>>> isinstance(s,SPAMFilter)
True
>>> isinstance(f,Filter)
True
>>> isinstance(s,Filter)
True
>>> isinstance(f,SPAMFilter)
False

__class__特性可以知道一个对象属于哪个类
>>> s.__class__
<class __main__.SPAMFilter at 0x0000000002EE9348>

---------------------------------------------------------------------------------------

多重继承 ,多超类
>>> class Calculator:
 def calur(self,expression):
  self.value=eval(expression)
 
>>> class Talker:
 def talk(self):
  print 'hi,my name is sss'
  
>>> class TalkandCalulator(Calculator,Talker):
 pass

>>> tc = TalkandCalulator()
>>> tc.talk()
hi,my name is sss
>>> tc.calur('1+2*3')

检查所需方法是否存在:
>>> hasattr(tc,'talk')   -------------- 存在返回True 不存在 False
True
>>> hasattr(tc,'fnord')
False

检查特性是否可被调用
>>> callable(getattr(tc,'talk',None))  ---- None 为提供的默认值
True
>>> callable(getattr(tc,'fnord',None))
False

callable函数在python3.0中已经不可再用

setattr 可以用来设置对象的特性
>>> setattr(tc,'name','qiao')
>>> tc.name
'qiao'

-------------------------------------------------------------------------------------------

你可能感兴趣的:(python)