6.面向对象
6.1类和实例
class Student(object):
#注意:特殊方法“init”前后有两个下划线!!!
def __init__(self,name,score):#第一个参数self永远是类创建的实例本身
self.__name=name
self.__score=score
def print_score(self):
print('%s: %s' % (self.__name,self.__score))
def get_grade(self):
if self.__score >= 90:
return 'A'
elif self.__score >= 60:
return 'B'
else:
return 'C'
bart = Student('Bart Simpson', 59)
bart.get_grade()
方法就是与实例绑定的函数,和普通函数不同,方法可以直接访问实例的数据,封装-----
-------
6.2 访问限制
#__name是private变量 如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__
私有变量__name 的实质是_Student__name,如此可以使用对象._Student__name访问,一般不这样使用
------
python中存在特殊变量 __name__ (双_开头,双_结束),外部对象是可以直接访问特殊变量的
6.3 继承和多态
python 是动态语言 鸭子理论,对于继承,只要子类实现了父类的方法,就可以继承父类
-------
6.4 获取对象信息
type('str') #返回(class 'str')
isinstance('a',str) #返回True
python中len()方法 len('abc')其实就是调用'abc'.__len__ #返回3
>>> class MyObject(object):
... def __init__(self):
... self.x = 9
... def power(self):
... return self.x * self.x
...
>>> obj = MyObject()
hasattr getattr setattr 直接操作对象的属性状态
hasattr(obj,'x') #True
setattr(obj,'y',19)
getattr(obj,'y') #返回为19
--获得对象的方法
getattr(obj,'power')
fn=getattr(obj,'power') #fn 指向obj.power
fn()==obj.power()
------------
6.5实例属性和类属性
python是动态语言,创建对象时,可以任意绑定属性
类属性属于类的,但是实例对象也可以进行访问调用,类属性和实例属性名称不要定义一样的