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

  • 相关阅读:
    js实现快速排序
    vue+Elementui表单验证基本使用
    angular 报错 Cannot assign to a reference or variable!
    nz-table复选功能改造(整行可选)
    angular在父组件设置子组件样式
    angular6路由参数的传递与获取
    上下滚动,头部固定,左右滚动,左侧边栏固定布局
    TimePicker
    angular配置懒加载路由的思路
    angular实现draggable拖拽
  • 原文地址:https://www.cnblogs.com/yuling25/p/15263211.html
Copyright © 2011-2022 走看看