OOP

作者: viean | 来源:发表于2018-05-22 22:20 被阅读0次

    类定义

    class Student(object):
        def __init__(self, name, score):
            self.__name = name
            self.__score = score
    
        def print_score(self):
            print '%s: %s' % (self.__name, self.__score)
    

    说明:init为构造函数,第一个参数为self为函数本身。
    类成员以双下划线开头,说明为private访问限制的,类实例不能直接访问。(一个下划线开头的实例变量名,外部是可以访问的。其实双下划线的变量,python将其改名为"类名变量名",类实例可以通过如上标识访问,但是、总之访问这些变量是不好的。)

    类继承

    class Animal(object):
        def run(self):
            print 'Animal is running...'
    
    class Dog(Animal):
        pass
    
    class Cat(Animal):
        def run(self):    #方法的overwrite
            print 'Dog is running...'
    
    dog = Dog()
    dog.run()
    
    cat = Cat()
    cat.run()
    
    #多态--父类是参数
    def run_twice(animal):
        animal.run()
        animal.run()
    
    #如下两个都可以正常运行
    run_twice(Animal())
    run_twice(Dog())
    

    类继续可以共用父类公共方法,可重写父类的不适宜方法;
    多态在类作为参数时,可以接收父类型的参数,把子类视作父类型参数进行调用。

    type() 方法可获取对象类型

    import types
    types模块中有相应类型定义

    >>> type('abc')==types.StringType
    True
    >>> type(u'abc')==types.UnicodeType
    True
    >>> type([])==types.ListType
    True
    >>> type(str)==types.TypeType
    True
    

    有一种类型就叫TypeType,所有类型本身的类型就是TypeType

    isinstance() 判断变量是否为某类实例

    dir() 获得一个对象的所有属性和方法

    len() 返回对象长度(自动去调用该对象的len()方法)

    >>> class MyObject(object):
    ...     def __init__(self):
    ...         self.x = 9
    ...     def power(self):
    ...         return self.x * self.x
    ...
    >>> obj = MyObject()
    
    >>> hasattr(obj, 'x') # 有属性'x'吗?
    True
    >>> hasattr(obj, 'y') # 有属性'y'吗?
    False
    >>> setattr(obj, 'y', 19) # 设置一个属性'y'
    >>> hasattr(obj, 'y') # 有属性'y'吗?
    True
    >>> getattr(obj, 'y') # 获取属性'y'
    19
    >>> getattr(obj, 'z', 404) # 获取属性'z',如果不存在,返回默认值404
    404
    #如上也可以应用于方法

    相关文章

      网友评论

          本文标题:OOP

          本文链接:https://www.haomeiwen.com/subject/qltmkftx.html