Python|面向对象

发布时间:2019-03-13 22:47:03编辑:auto阅读(1837)

    #一、类、对象定义及使用
    #定义类语法:class  类名(父类):代码块注意:()可有可无
    #class Student:
    #class Student():
    #创建对象(实例)语法:对象名=类名()   注意:Java语言在实例化对象是,采用new关键字,而Python语言不需要。
    #student=Student()
    #isinstance()语法:isinstance()是检测一个对象是否是一个类的实例,语法格式:isinstance(对象,类),结果返回True和False
    # class Student:
    #     print(123)
    # student=Student()
    # print(isinstance(student,Student))        #True
    #二、属性和方法
    #1.属性
    # 属性:分为类属性和对象属性
    # 属性修饰符:私有属性、公共属性
    #(1)类属性
    # class Student:
    #     name='张三'
    
    #(2)对象属性
    # class Student:
    #     name='张三'
    # student=Student()
    # student.age=18
    # print(student.name)    #张三
    # print(student.age)    #18
    
    #拓展:类属性和对象属性的区别?
    # 类属性直接通过类名就可以调用,比如:Student.name
    # 对象属性必须通过对象名调用,比如:studentn.name
    
    #(3)公共属性
    # 没有任何修饰符,该类型的属性可以被任意一个对象所调用
    #name="张三"
    #print(name)
    
    #(4)私有属性
    # 私有属性,不能通过对象调用,也不能通过类名调用,只能在本类中调用,
    # 类似Java语言中的private,如果想要在外部调用,则需提供get和set方法,私有属性通过双下划线修饰__
    # __name='李四'
    # print(__name)    #李四
    
    #2.方法
    #方法分类:对象方法、类方法、静态方法
    #(1)对象方法
    # 定义在类中的函数被称为方法,所有的实例都可以访问
    # 注意:对象方法,必须默认传递一个参数self,类似java中的this关键字
    # 调用:只能通过对象调用
    
    #定义对象方法
    # class Student:
    #     def study(self):
    #         print("我还在学习")
    
    # #调用
    # student=Student()
    # student.study()        #我还在学习
    
    # (2)类方法
    # 被@classmethod修饰的方法,被称为类方法
    # 参数:cls
    # 调用:可以通过类调用
    
    #定义类方法
    # class Student:
    #     @classmethod
    #     def sleep(cls):
    #         print("睡觉")
    
    # #调用
    # Student.sleep()        #睡觉
    
    #(3)静态方法
    # 被@staticmethod修饰的方法,被称为静态方法
    # 参数:无参数
    # 调用:可以通过类和对象调用
    
    #定义静态方法
    # class Student:
    #     @staticmethod
    #     def play():
    #         print("play basketball")
    
    # #调用
    # #类名调用
    # Student.play()    #play basketball
    # #对象调用
    # student=Student()
    # student.play()    #play basketball
    
    #三、构造方法
    # 构造方法是以双下划线__开头,双下划线__结尾,方法名叫init,构造方法不需要自己调用,
    # 在实体化对象时调用,和Java中的构造方法一样,语法格式:def  __init__(self,参数):代码块
    
    # class Student:
    #     name='sss'
    #     __age=18        
    #     def __init__(self,name,age):
    #         print(456)
    #         self.name=name
    #         self.__age=age
    
    # student=Student('张三','19')
    # print(student.name)
    
    #四、封装
    # 封装,是给类中的属性提供get、set方法,语法格式:
    # def  set方法(self):代码块
    # def  get方法(self):代码块
    
    # class Student:
    #     __name='sss'
    #     def setName(self,name):
    #         self.name=name
    #     def getName(self):
    #         return self.name
    
    # student=Student()
    # student.setName('张三')
    # print(student.getName())    #张三
    
    #get、set装饰器
    # get方法装饰器:@property
    # set方法装饰器:@属性名.setter
    # 调用:直接通过对象.属性名即可
    # 注意:get方法修饰器必须写到set方法修饰器前面
    # class Student:
    #     __name='张三'
    #     print(__name)    #张三
    #     @property
    #     def name(self):
    #         return self.__name
    #     @name.setter
    #     def name(self,name):
    #         self.__name=name
    
    # student=Student()
    # student.name='李四'
    # print(student.name)    #李四
    
    
    # 五、继承
    # 继承语法class  子类(父类1,父类2):通过语法格式可以看出Python语言支持多继承,Java语言只支持单继承
    class Student:
        name='sss'
        __age=18        
        def __init__(self,name,age):
            print(name)
            self.name=name
            self.__age=age
        def study(self):
            print("Student我还在学习")
    
    class Person:
        def study(self):
            print("Person我还在学习")
    
    class Boy(Student):
        def sleep(self):
            print("睡觉")
        # def study(self):
        #     print("Boy我还在学习")
    #issubclass()
    # issubclass()方法作用:
    # 检测一个类是否是另外一个类的子类
    # 语法:issubclass(子类,父类)
    print(issubclass(Boy,Student))    #True
    
    print(issubclass(Boy,Person))    #False
    
    # 多继承
    # 查看一个类的继承关系使用:
    # 类名.__bases__属性
    # 多继承特点:一层一层获取,先找自己的类中,再从继承关系中找
    print(Boy.__bases__)    #(<class '__main__.Student'>,)
    boy=Boy('何洋',19)    #何洋
    boy.study()    #Student我还在学习
    boy.sleep()    #睡觉
    
    # 六、多态
    class Student:
        __name='aaa'
        print("这是Student")
        def __init__(self,name):
            self.__name=name
        @property
        def name(self):
            return self.__name
        @name.setter
        def name(self,name):
            self.__name=name
        
    
    class Boy:
        __name='aaa'
        print("这是Boy")
        def __init__(self,name):
            self.__name=name
        @property
        def name(self):
            return self.__name
        @name.setter
        def name(self,name):
            self.__name=name
    
    class Girl:
        print("这是Girl")
    
    def eat(obj):
        print("%s正在吃饭"%obj.name)
    
    student=Student('李四')
    boy=Boy('小男孩')
    girl=Girl()
    eat(student)    #李四正在吃饭
    eat(boy)        #小男孩正在吃饭
    eat(girl)        #报错

    今天学了python感觉收获颇多。

关键字