美文网首页
2020-10-11 Python: 类

2020-10-11 Python: 类

作者: MJades | 来源:发表于2020-10-11 23:33 被阅读0次

    Define Class

    class Employee:
    raise_amt = 1.04    # 实参:无需在创建对象时传递
    
    # self会自动向下传递,无需在创建类的时候进行传递;而first, last, pay需在创建对象时进行传递;
    def __init__(self, first, last, pay):   # 均为形参
        self.first = first
        self.last = last
        self.email = first + '.' + last + '@email.com'
        self.pay = pay
    
    # 字符串的format函数可以接受不限个参数,位置可以不按顺序,可以不用或者用多次;
    def fullname(self):
        return '{} {}'.format(self.first, self.last)
    
    def apply_raise(self):
        self.pay = int(self.pay + self.raise_amt)
        return self.pay
    

    根据类来创建对象

    emp_1 = Employee('Corey', 'Schafer', 50000)
    
    1. 调用类中的方法
    Employee.fullname(emp_1)
    Employee.apply_raise(emp_1)
    
    2. 调用类的属性:通用属性
    emp_1.raise_amt
    emp_1.first
    
    3. 修改属性的值

    method 1: 直接修改

    emp_1.raise_amt
    emp_1.raise_amt=2
    emp_1.raise_amt
    

    method 2: 通过方法修改属性的值

    class Employee:
    raise_amt = 1.04    # 实参:无需在创建对象时传递
    
    # self会自动向下传递,无需在创建类的时候进行传递;而first, last, pay需在创建对象时进行传递;
    def __init__(self, first, last, pay):   # 均为形参
        self.first = first
        self.last = last
        self.email = first + '.' + last + '@email.com'
        self.pay = pay
    
    # 字符串的format函数可以接受不限个参数,位置可以不按顺序,可以不用或者用多次;
    def fullname(self):
        return '{} {}'.format(self.first, self.last)
    
    def apply_raise(self):
        self.pay = int(self.pay + self.raise_amt)
        return self.pay
    
    def update_raise_amt(self,new):
        self.raise_amt = new
        
    
    emp_1 = Employee('Corey', 'Schafer', 50000)
    emp_1.raise_amt
    emp_1.update_raise_amt(2)
    emp_1.raise_amt
    

    继承

    一个类继承另外一个类时,将自动获得另一个类的所有属性与方法,还可以定义自己的属性与方法, 原来的类为父类,新的类为子类;
    For example: Employee是父类,在()内定义who是父类:
    super()是一个特殊的函数,帮助Python将父类与子类关联起来, 这个函数让Python调用Son的父类的方法init(),让Son实例包含父亲的所有属性。

    1. 给子类定义属性和方法

    class Son(Employee):
    
    # __init__里super()函数将父类与子类关联起来,调用父类的__init__()
    def __init__(self, first, last, pay):
        super().__init__(first, last, pay)
        self.sex = "F" # 子类特有的属性
    
    # 定义子类的方法
    def add(self,age):
        return 'Age: '+age 
    
    new = Son("a","c",200)
    

    调用子类中的方法

    new.add('28')
    

    2. 重写父类中的方法:当父类中方法不符合子类时,可以在子类中用和父类相同的函数名对父类中的函数进行重写

    class Son(Employee):
    
    # __init__里super()函数将父类与子类关联起来,调用父类的__init__()
    def __init__(self, first, last, pay):
        super().__init__(first, last, pay)
        self.sex = "F" # 子类特有的属性
    
    # 定义子类的方法
    def add(self,age):
        return 'Age: '+age 
    
    # 重写父类中的函数fullname
    def fullname(self):
        return "{}-{}".format(self.last, self.first)
    
    new = Son('Corey', 'Schafer', 50000)
    Son.fullname(new)
    new.add("90")
    
    1. 若没有额外的传递参数(即:除self之外,没有其他形参),则Son.fullname(new),类名.函数名(实例);
    2. 若有额外的形参,则不需要写类名,实例.函数名(传递形参)。

    3. 将实例作为属性

    当对类添加的细节过多时,可以将具体的一些细节分离出来,形成实例的类,然后可以在类中将实例作为属性

    # 实例
    class Lina():
    
        def __init__(self, name= 'Lulu'):
            self.name = name
    
        def nickname(self):
            print("The nickname of Lina is Lulu")  
    
    
    
    class Son(Employee):
    
    # __init__里super()函数将父类与子类关联起来,调用父类的__init__()
    def __init__(self, first, last, pay):
        super().__init__(first, last, pay)
        self.sex = "F" # 子类特有的属性
        self.nickname = Lina() # 以实例为属性
    
    # 定义子类的方法
    def add(self,age):
        return 'Age: '+age 
    
    new = Son('Corey', 'Schafer', 50000)
    new.nickname.nickname() # 调用实例中的详细描述,即方法
    

    导入、调用类

    %run employee.ipynb
    emp_1 = Employee('Corey', 'Schafer', 50000)
    emp_1.raise_amt
    

    End

    相关文章

      网友评论

          本文标题:2020-10-11 Python: 类

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