第六章:类和对象
1.创建类
class Person:
def setName(self,name):
self.name=name
def getName(self):
Return self.name
def greet(self):
print(‘hello,’self.name)
创建对象:
>>foo=Person()
>>bar=Person()
>>foo.setName(‘zq’)
>>foo.greet()
输出:hello,zq
>>bar.name=’zq2’
>>bar.greet()
输出:hello,zq2
>>jkl=bar.greet
>>jkl()
输出:hello,zq2 #因为绑定的是bar的对象,因此还是相当于调用bar对象的方法
可以看出,self实际上是把对象本身传入方法中去了,这就是绑定方法和函数的区别,方法中有self,函数中则没有
2.私有化
class Sec:
def __ina(self):
print(you can not see)
def acc(self):
print(‘message is:’,self.__ina())
>>s=Sec()
>>此时输出s__ina会报错
>>输出s.acc()才能正确输出
特别地:在类的内部的变量,可以被所有实例访问
3.超类
class Filter:
def pre():
print(‘hello’)
class MF(Filter):
def pre():
print(‘hello2’)
MF就是Filter的一个子类,如果检查一个类是否是另一类的子类用内建的函数:
issubclass(A,B) 如果A是B的子类返回True,否则返回False
如果想知道已知类的基类则用下面的函数:
MF.__bases__ 输出所有基类的信息
检查一个对象是否为一个类的实例:
isinstance(对象,类名) 返回True或者False
如果使用__metaclass__=type或从object继承的方式定义类的时候,可以用type(对象名)查看实例的类
多重继承的情况要慎用,假如继承了A,B两个类,如果A和B的方法中有名称一样的那么A会重写B的方法,将B的方法覆盖。
4.接口
getattr(对象名,’类中的方法或者函数’,None)
可以返回类中的方法是否可以调用
setattr(对象名,对象的属性,’值’)
将类中的对象的属性,通过对象名设置为某一个值。
例如:
>>setattr(tc,’name’,’zq’)
>>tc.name
输出:zq
<!--EndFragment-->