zoukankan      html  css  js  c++  java
  • Python-类

    1 创建和使用类

    1.1 创建 Dog 类

    根据 Dog 类创建的每个实例都将存储名字和年龄,我们赋予了每条小狗蹲下(sit())和打 滚(roll_over())的能力:

    class Dog:#定义类
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def sit(self):
            print(f"{self.name} is now sitting")
    
        def roll_over(self):
            print(f"{self.name} rolled over")
    
    方法 __init__()

    类中的函数称为方法。每当根据类创建新实例时,Python 会自动调用这个 __init__() 方法,

    在这个方法的定义中,形 参 self 必不可少,而且必须位于其他形参的前面。为何必须在方法定义中包含形参 self 呢?因 为 Python 调用这个方法来创建 Dog 实例时,将自动传入实参 self。每个与实例相关联的方法调 用都自动传递实参 self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。创 建 Dog 实例时,Python 将调用 Dog 类的方法__init__()。我们将通过实参向 Dog()传递名字和年 龄,self 会自动传递,因此不需要传递它。每当根据 Dog 类创建实例时,都只需给最后两个形参 (name 和 age)提供值。

    1.2 根据类创建实例

    my_dog = Dog('willie', 8)
    print(f"my dog's name is {my_dog.name}")
    print(f"my dog is {my_dog.age} years old")
    #my dog's name is willie
    #my dog is 8 years old
    
    1.2.1 访问属性
    my_dog.name
    my_dog.age
    
    1.2.2 调用方法
    my_dog.sit()
    my_dog.roll_over()
    
    1.2.3 创建多个实例
    my_dog = Dog('Willie', 6)
    your_dog = Dog('Lucy', 3)
    print(f"My dog's name is {my_dog.name}.")
    print(f"My dog is {my_dog.age} years old.")
    my_dog.sit()
    print(f"
    Your dog's name is {your_dog.name}.")
    print(f"Your dog is {your_dog.age} years old.")
    your_dog.sit() 
    

    2 继承

    编写类时,并非总是要从空白开始。如果要编写的类是另一个现成类的特殊版本,可使用继 承。一个类继承另一个类时,将自动获得另一个类的所有属性和方法。原有的类称为父类,而新 类称为子类。子类继承了父类的所有属性和方法,同时还可以定义自己的属性和方法。

    2.1 子类的方法__init__()

    在已有的类基础上编写新类时,通常需要调用父类的方法__init__()>。这将初始化在父类 __init__()方法中定义的所有属性,从而让子类包含这些属性。

    class Father:
        def __init__(self, sname, age):
            self.sname = sname
            self.age = age
    
        def info(self):
            print(f"{self.sname} is {self.age} years old ")
    
    
    class Son(Father):
        def __init__(self, sname, age):
            super().__init__(sname, age)
    
    student1 = Son('zhangsan', 18)
    student1.info()
    #zhangsan is 18 years old 
    

    定义子类时,必须在圆括号内指定父类的名称。

    super()是一个特殊的函数,它能够让子类调用父类的方法。父类也成为超类。

    2.2 给子类定义属性和方法

    让一个类继承另一个类后,就可以添加区分子类和父类所需的新属性和新方法了。

    子类独有的属性和方法写在继承父类之后。

    class Father:
        def __init__(self, sname, age):
            self.sname = sname
            self.age = age
    
        def info(self):
            print(f"{self.sname} is {self.age} years old ")
    
    class Son(Father):
        def __init__(self, sname, age,sex):
            super().__init__(sname, age)
            self.sex = sex  #新属性
    
        def info_2(self):   #新方法
            if self.sex == '男':
                print(f"{self.sname} is a boy, he is {self.age} years old")
            else:
                print(f"{self.sname} is a girl, she is {self.age} years old")
    
    student1 = Son('zhangsan', 18, '男')
    student1.info_2()
    student1 = Son('xiaohong', 20, '女')
    student1.info_2()
    #zhangsan is a boy, he is 18 years old
    #xiaohong is a girl, she is 20 years old
    

    2.3 重写父类方法

    对于父类的方法,只要它不符合子类模拟的实物的行为,都可以进行重写。为此,可在子类 中定义一个与要重写的父类方法同名的方法。这样,Python 将不会考虑这个父类方法,而只关注 你在子类中定义的相应方法。

    2.4 将实例用作属性

    class Math1:
        def __init__(self, a=3, b=4):
            self.a = a
            self.b = b
    
        def add(self):
            print(f"{self.a} + {self.b} = {self.a + self.b}")
    
        def mult(self):
            print(f"{self.a} * {self.b} = {self.a * self.b}")
    
    class Math2:
        def __init__(self, c, d):
            self.math1 = Math1()
            self.c = c
            self.d = d
    
        def cloth(self):
            print(f"{self.c} ** {self.d} = {self.c ** self.d}")
    
    number1 = Math2(4, 5)
    number1.math1.add()
    #3 + 4 = 7
    

    3 导入类

    可以将类存储在模块中,然后 在主程序中导入所需的模块。

    3.1 导入单个类

    from module_name import class_name
    

    3.2 导入多个多个类

    from module_name import class_1, class_2...
    

    3.3 导入整个模块

    import module_name
    

    3.4 导入模块中的所有类

    from module_name import *
    

    3.5 使用别名

    from module_name import class_name as other_
    

    本文来自博客园,作者:雨-铃,原文链接:https://www.cnblogs.com/yuling25/p/15263211.html

  • 相关阅读:
    2021.1.28 个人rating赛补题报告
    2021.1.23 个人rating赛补题报告
    2021.1.23 个人rating赛补题报告
    2020.12.14 个人训练赛补题报告
    2020.11.28 2020团体程序设计天梯赛补题报告
    2020.12.3 Codeforces Beta Round #73(Div2)补题报告
    Xhorse VVDI Prog V5.0.6 is Ready for BCM2 Adapter
    Program 2021 Ford Bronco All Keys Lost using VVDI Key Tool Plus
    Xhorse VVDI Prog V5.0.4 Software Update in July 2021
    How to use Xhorse VVDI2 to Exchange BMW FEM/BDC Module?
  • 原文地址:https://www.cnblogs.com/yuling25/p/15263211.html
Copyright © 2011-2022 走看看