美文网首页
Python:9.面向对象编程

Python:9.面向对象编程

作者: 许瘦子来世 | 来源:发表于2018-07-11 16:21 被阅读18次

    访问限制

    # 访问限制
    
    # 将类中的属性私有化
    '''
    1. 内部属性不被外界访问,可以把属性的名称前加上两个下划线__
    2. 实例的变量名如果以__开头,就变成了一个私有变量,只有内部可以访问,外部不能访问
    
    3. 允许外部获取私有属性的值:给类增加get_name和get_score这样的方法
    4. 允许外部修改私有属性的值:给类增加set_name和set_score这样的方法
    '''
    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))
    
        # 外部代码,获取私有属性的值
        def get_name(self):
            return self.__name
        
        def get_score(self):
            return self.__score
    
        # 外部代码,修改私有属性的值
        def set_name(self, name):
            self.__name = name
    
        def set_score(self, score):
            self.__score = score
    

    继承和多态

    # 继承和多态
    # 继承
    '''
    1. 定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class, Super class)
    2. 子类获取父类的全部功能
    3. 多态:子类可以覆盖父类的方法
    '''
    
    # 多态
    '''
    开闭原则
    对扩展开放:允许新增父类的子类
    对修改封闭:不需要修改依赖父类类型的函数
    '''
    

    获取对象信息

    # 获取对象信息
    
    # type()
    # 基本类型,变量指向函数,类都可以用type()
    print(type(1234))
    print(type('asf'))
    print(type(None))
    
    # 比较type类型是否相同
    print(type(1234) == type(2345))
    print(type(1234) == int)
    
    # 判断一个对象是否是函数
    def fn():
        pass
    
    print(type(fn) == types.FunctionType)
    print(type(abs) == types.BuiltinFunctionType)
    print(type(lambda x : x) == types.LambdaType)
    print(type((x for x in range(10))) == types.GeneratorType)
    
    # isinstance()
    # 判断class的继承
    # 能用type()判断的基本类型也可以用isinstance()判断
    # 可以判断一个变量是否是某些类型中的一种
    isinstance([1,2,3],(list,tuple))
    
    # dir()
    # 获取一个对象的所有属性和方法,返回一个list
    print(dir('ABC'))
    
    # 自己写的类,如果要实现len(myObjec)方法,就自己写一个__len__()方法
    class MyDog(object):
        def __len__(self):
            return 100
    
    dog = MyDog()
    print(len(dog))
    
    # lower()返回小写的字符串
    print('ABC'.lower())
    
    # gettattr(),setattr(),hasattr()
    # 有某个属性吗
    print(hasattr(dog,'x'))
    # 设置一个属性 x
    setattr(dog,'x',20)
    # 获取属性 x
    print(getattr(dog,'x'))
    # 如果试图获取不存在的属性,会抛出错误。可以传入默认参数,如果属性不存在,就返回默认参数
    print(getattr(dog, 'y', 404))
    

    实例属性和类属性

    千万不要对类属性和实例属性使用相同的名字,因为相同名字的实例属性将屏蔽掉类属性的名字。但是当你删除实例属性后,再使用相同的名称,访问到的将是类属性

    相关文章

      网友评论

          本文标题:Python:9.面向对象编程

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