Python_6_类

作者: 芭比哪吒 | 来源:发表于2018-08-24 15:26 被阅读53次

    一、类的定义

    # 定义类
    class People:
        # 定义基本属性
        name = ""
        age = 0
        # 定义私有属性
        _sex = ""
    
        # 定义构造方法
        # ps:self 代表的是类的实例,代表当前对象的地址,而 self.class 则指向类
        # self 不是 python 关键字,我们把他换成 mmp 也是可以正常执行的
        def __init__(self, name, age, sex):
            self.name = name
            self.age = age
            self._sex = sex
    
        # 定义方法
        def speak(self):
            print("{name}说,我叫{name},今年{age}岁".format(name=self.name, age=self.age))
    

    二、类实例化

    # 实例化
    x = People("李四", 12, "男")
    # 调用类方法
    x.speak()
    

    三、继承

    ##继承
    class Student(People):
        # 多态
        grade = 0
    
        def __init__(self, name, age, sex, grade):
            # 调用父类的构造方法
            People.__init__(self, name, age, sex)
            self.grade = grade
    
        # 覆盖父类的方法
        def speak(self):
            print("{name}说,我是一个学生,我在读{grade}年级,我今年{age}岁".format(name=self.name, grade=self.grade, age=self.age))
    
    
    stu = Student("泰迪", 12, "男", 2)
    stu.speak()
    

    四、多继承

    需要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索,即方法在子类中未找到时,从左到右查找父类中是否包含方法。
    所以,方法名同,默认调用的是在括号中排前地父类的方法

    # 人类
    class People:
        name = ""
        age = 0
    
        def __init__(self, name, age):
            self.age = age
            self.name = name
    
        def speak(self):
            print("my name is {name},{age} years old.".format(name=self.name, age=self.age))
    
    
    # p = People("LiLei", 23)
    # p.speak()
    
    
    # 演说家类
    class Speaker:
        topic = ""
    
        def __init__(self, topic):
            self.topic = topic
    
        def speak(self):
            print("I am a speaker,topic is {topic}".format(topic=self.topic))
    
    
    class sample1(People, Speaker):
        def __init__(self, name, age, topic):
            People.__init__(self, name, age)
            Speaker.__init__(self, topic)
    
    
    class sample2(Speaker, People):
        def __init__(self, name, age, topic):
            People.__init__(self, name, age)
            Speaker.__init__(self, topic)
    
    
    test1 = sample1("LiLe", 23, "NBA")
    test1.speak()
    
    test2 = sample2("LiLe", 23, "NBA")
    test2.speak()
    

    输出结果
    test1=>my name is LiLe,23 years old.
    test2=>I am a speaker,topic is NBA

    五、方法重写

    如果父类方法的功能不足,可以在子类中重新编写这个方法

    class car:
        def run(self):
            print("the fastest Speed 20 km/h")
    
    
    class SportsCar(car):
        def run(self):
            print("the fastest Speed 200 km/h")
    
    
    test = SportsCar()
    test.run()
    
    super(SportsCar,test).run()
    

    通过super 则可以通过子类实例,调用已经被覆盖的父类方法

    六、类属性与方法

    私有属性

    两个下划线开头,声明该属性为私有


    私有的字段不能在类外被访问

    类的方法

    在类地内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数self 代表的是类的实例
    self 的名字并不是规定死的,也可以使用 this,但是最好还是按照约定是用 self

    私有方法

    __eat:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类地外部调用。self.__eat

    类的专有方法

    init : 构造函数,在生成对象时调用
    del : 析构函数,释放对象时使用
    repr : 打印,转换
    setitem : 按照索引赋值
    getitem: 按照索引获取值
    len: 获得长度
    cmp: 比较运算
    call: 函数调用
    add: 加运算
    sub: 减运算
    mul: 乘运算
    div: 除运算
    mod: 求余运算
    pow: 乘方
    ps:类的专有方法一样是可以被重载

    相关文章

      网友评论

        本文标题:Python_6_类

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