Python 面向对象

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是动态语言,创建对象时,可以任意绑定属性

类属性属于类的,但是实例对象也可以进行访问调用,类属性和实例属性名称不要定义一样的

posted @ 2017-11-28 18:04  smartwen  阅读(140)  评论(0编辑  收藏  举报