数据类型—自定义

往往常用的数据类型不能满足我们的实际要求,就需要程序员根据具体数据进行自定义

自定义类型:namedtuple

根据您的查询,您似乎想了解Python中的namedtuple类型。实际上,namedtuple是Python中的一个内置类型,用于创建具有命名字段的元组。

非常适合我们从数据库中读取每一条记录。

以下是一个使用namedtuple类型的示例:

from collections import namedtuple

# 创建一个名为Person的新namedtuple类型
Person = namedtuple('Person', ['name', 'age', 'gender'])

# 创建一个Person对象
person1 = Person('Alice', 25, 'female')

# 输出Person对象的属性
print(person1.name)    # 输出'Alice'
print(person1.age)     # 输出25
print(person1.gender)  # 输出'female'

在此示例中,我们首先使用namedtuple()函数创建一个名为Person的新namedtuple类型,该类型具有三个命名字段(name、age和gender)。

然后,我们使用Person()函数创建一个名为person1的新Person对象,并使用字符串’Alice’、整数25和字符串’female’填充对象的属性。

最后,我们使用print()函数输出person1对象的属性,以验证它们已成功填充。

自定义类型:enum(枚举)

根据您的查询,您似乎想了解Python中的enum类型。实际上,enum是Python中的一个内置模块,用于创建枚举类型。

适合一个字段有多个取值的情况,每一种值代表不一样的意思的适合。

以下是一个使用enum模块创建枚举类型的示例:

from enum import Enum

# 创建一个名为Color的新枚举类型
class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3

# 输出枚举类型的成员
print(Color.RED)    # 输出'Color.RED'
print(Color.GREEN)  # 输出'Color.GREEN'
print(Color.BLUE)   # 输出'Color.BLUE'

# 输出枚举类型的值
print(Color.RED.value)    # 输出1
print(Color.GREEN.value)  # 输出2
print(Color.BLUE.value)   # 输出3

在此示例中,我们首先使用class关键字创建一个名为Color的新类,并将其继承自Enum类。

然后,我们在类中定义三个枚举成员(RED、GREEN和BLUE),并为每个成员分配一个唯一的值。

最后,我们使用print()函数输出枚举成员和它们的值,以验证它们已成功创建。

自定义类型:class 类

根据您的查询,您似乎想了解如何在Python中创建一个包括属性和方法的类。实际上, 类是Python中的一个重要概念,用于 创建对象和实现面向对象编程。在类中, 属性是类的数据成员,而方法是类的函数成员

以下是一个使用类创建包括属性和方法的示例:

# 定义一个名为Person的新类
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def say_hello(self):
        print(f"Hello, my name is {self.name} and I am {self.age} years old.")

# 创建一个Person对象
person1 = Person('Alice', 25)

# 输出Person对象的属性
print(person1.name)    # 输出'Alice'
print(person1.age)     # 输出25

# 调用Person对象的方法
person1.say_hello()    # 输出'Hello, my name is Alice and I am 25 years old.'

在此示例中,我们首先使用class关键字创建一个名为Person的新类。然后,我们在类中定义一个名为 __init__() 的特殊方法, 该方法用于初始化新对象的属性。在 __init__() 方法中,我们使用self关键字引用新对象,并使用name和age参数填充对象的属性。 接下来,我们在类中定义一个名为 say_hello() 的方法,该方法用于输出对象的属性。 在 say_hello() 方法中,我们使用self关键字引用对象的属性,并使用 print() 函数输出一条包含属性的消息。 最后,我们使用 Person() 函数创建一个名为person1的新Person对象,并使用字符串 'Alice' 和整数25填充对象的属性。 最后,我们使用 print() 函数输出person1对象的属性,并使用 person1.say_hello() 调用对象的方法,以验证它们已成功创建。

基类

根据您的查询,您似乎想了解Python中的基类。实际上,在Python中,基类是一个类,其他类可以从中继承属性和方法。

基类也称为 超类或父类

以下是一个使用基类创建子类的示例:

# 定义一个名为Animal的基类
class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        raise NotImplementedError("Subclass must implement abstract method")

# 定义一个名为Dog的子类
class Dog(Animal):
    def speak(self):
        return "Woof!"

# 定义一个名为Cat的子类
class Cat(Animal):
    def speak(self):
        return "Meow!"

# 创建一个Dog对象并调用其方法
dog1 = Dog("Fido")
print(dog1.name)      # 输出'Fido'
print(dog1.speak())   # 输出'Woof!'

# 创建一个Cat对象并调用其方法
cat1 = Cat("Whiskers")
print(cat1.name)      # 输出'Whiskers'
print(cat1.speak())   # 输出'Meow!'

在此示例中,我们首先使用class关键字创建一个名为Animal的基类。

然后,我们在类中定义一个名为 __init__() 的特殊方法,该方法用于初始化新对象的属性。

__init__() 方法中,我们使用self关键字引用新对象,并使用name参数填充对象的属性。

接下来,我们在类中定义一个名为 speak() 的方法,该方法用于输出对象的声音。

speak() 方法中,我们使用 raise 语句引发一个名为 NotImplementedError 的异常,以确保子类实现该方法。

然后,我们使用class关键字创建一个名为Dog的子类,并将其继承自Animal基类。

在Dog子类中,我们重写了Animal基类的 speak() 方法,并返回字符串 'Woof!'

接下来,我们使用class关键字创建一个名为Cat的子类,并将其继承自Animal基类。

在Cat子类中,我们重写了Animal基类的 speak() 方法,并返回字符串 'Meow!'

最后,我们使用 Dog() 函数创建一个名为dog1的新Dog对象,并使用字符串’Fido’填充对象的属性。

然后,我们使用 print() 函数输出dog1对象的属性,并使用 dog1.speak() 调用对象的方法,以验证它们已成功创建。

接下来,我们使用 Cat() 函数创建一个名为cat1的新Cat对象,并使用字符串 'Whiskers' 填充对象的属性。

然后,我们使用 print() 函数输出cat1对象的属性,并使用 cat1.speak() 调用对象的方法,以验证它们已成功创建。

ABC基类

根据您的查询,您似乎想了解Python中的ABC基类。实际上,ABC(Abstract Base Class)是Python中的一个内置模块,用于创建抽象基类。

抽象基类是一种特殊的类, 不能直接实例化,而是用于定义其他类的接口和行为。

以下是一个使用ABC模块创建抽象基类的示例:

from abc import ABC, abstractmethod

# 定义一个名为Shape的抽象基类
class Shape(ABC):
    @abstractmethod
    def area(self):
        pass

    @abstractmethod
    def perimeter(self):
        pass

# 定义一个名为Rectangle的子类
class Rectangle(Shape):
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def area(self):
        return self.width * self.height

    def perimeter(self):
        return 2 * (self.width + self.height)

# 创建一个Rectangle对象并调用其方法
rect1 = Rectangle(5, 10)
print(rect1.area())         # 输出50
print(rect1.perimeter())    # 输出30

在此示例中,我们首先使用from关键字导入ABC和 abstractmethod 类。然后,我们使用 class 关键字创建一个名为 Shape 的抽象基类,并在类中定义两个抽象方法( area()和perimeter() )。

在每个抽象方法中,我们使用 @abstractmethod装饰器 将方法标记为抽象,并使用 pass 语句占位符来指示子类必须实现该方法。

接下来,我们使用 class 关键字创建一个名为Rectangle的子类,并将其继承自Shape抽象基类。

在Rectangle子类中,我们重写了Shape抽象基类的 area()和perimeter() 方法,并返回矩形的面积和周长。

最后,我们使用 Rectangle() 函数创建一个名为rect1的新Rectangle对象,并使用整数5和10填充对象的属性。

然后,我们使用 print() 函数输出rect1对象的属性,并使用 rect1.area()和rect1.perimeter() 调用对象的方法,以验证它们已成功创建。