python 类详解及简单实例

Python 类详解及简单实例

类和实例

在Python中,我们使用class来定义一个类,实例化一个类得到一个对象,这是面向对象编程的基本概念。

class MyClass:
    pass

my_instance = MyClass() # 实例化一个对象

我们可以使用type()函数来查看对象的类型,如:

print(type(my_instance)) # <class '__main__.MyClass'>

当我们实例化一个对象时,Python解释器会自动调用对象的构造函数__init__(),该函数可以接收除self(当前对象)以外的任何参数。

class MyClass:
    def __init__(self, name):
        self.name = name

my_instance = MyClass('Jack')
print(my_instance.name) # Jack

属性和方法

类包含属性和方法这两个核心元素。

属性

属性是类中的变量,通过.来访问。

class MyClass:
    class_var = 0 # 类变量,所有类的实例共享

    def __init__(self, name):
        self.name = name # 实例变量,每个实例都独有

my_instance_1 = MyClass('Jack')
my_instance_2 = MyClass('Rose')

print(my_instance_1.class_var) # 0
print(my_instance_2.class_var) # 0

my_instance_1.class_var = 1
print(my_instance_1.class_var) # 1
print(my_instance_2.class_var) # 0

方法

方法是类中的函数,方法包括普通方法和类方法。

普通方法

普通方法第一个参数默认为实例本身,通常以self作为名字。

class MyClass:
    def __init__(self, name):
        self.name = name

    def greet(self):
        print(f'Hello, {self.name}!')

my_instance = MyClass('Jack')
my_instance.greet() # Hello, Jack!

类方法

类方法的第一个参数默认为类本身,通常以cls作为名字,使用@classmethod装饰器来定义。

class MyClass:
    class_var = 0

    @classmethod
    def class_method(cls):
        cls.class_var += 1

my_instance_1 = MyClass()
my_instance_2 = MyClass()

MyClass.class_method() # 修改类变量
print(my_instance_1.class_var) # 1
print(my_instance_2.class_var) # 1

继承

在Python中,我们使用()来指定继承的父类。

class BaseClass:
    def __init__(self, name):
        self.name = name

    def greet(self):
        print(f'Hello, {self.name}!')

class SubClass(BaseClass):
    def greet(self):
        print(f'Hi, {self.name}!')

my_instance_1 = BaseClass('Jack')
my_instance_2 = SubClass('Rose')

my_instance_1.greet() # Hello, Jack!
my_instance_2.greet() # Hi, Rose!

子类可以重写父类的方法和属性,如上面代码中,子类重写了greet()方法。

示例一:模拟银行账户

假设我们要模拟银行账户,每个账户有账号和金额两个属性,有取款和存款两个操作。

class BankAccount:
    def __init__(self, account, balance=0):
        self.account = account
        self.balance = balance

    def deposit(self, amount):
        self.balance += amount
        print(f'Deposited {amount} yuan, now balance is {self.balance} yuan.')

    def withdraw(self, amount):
        if amount <= self.balance:
            self.balance -= amount
            print(f'Withdrawn {amount} yuan, now balance is {self.balance} yuan.')
        else:
            print(f'The balance is not enough, current balance is {self.balance} yuan.')

my_account = BankAccount('123456')
my_account.deposit(1000) # Deposited 1000 yuan, now balance is 1000 yuan.
my_account.withdraw(500) # Withdrawn 500 yuan, now balance is 500 yuan.
my_account.withdraw(1000) # The balance is not enough, current balance is 500 yuan.

示例二:继承与多态

假设我们要模拟几何形体,有圆形和矩形两种形状,有get_area()获取面积的操作。

class GeometricShape:
    def get_area(self):
        return 0

class Circle(GeometricShape):
    def __init__(self, r):
        self.r = r

    def get_area(self):
        return 3.14 * self.r ** 2

class Rectangle(GeometricShape):
    def __init__(self, a, b):
        self.a = a
        self.b = b

    def get_area(self):
        return self.a * self.b

my_circle = Circle(5)
my_rectangle = Rectangle(3, 4)
print(my_circle.get_area()) # 78.5
print(my_rectangle.get_area()) # 12

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 类详解及简单实例 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 简单的Python抓taobao图片爬虫

    针对“简单的Python抓taobao图片爬虫”这一主题,我为您提供完整的攻略: 爬虫准备 安装requests和beautifulsoup4 首先,在Python环境中需要安装requests和beautifulsoup4两个库,以便我们使用其中的类和方法。在命令行输入以下命令即可: pip install requests pip install bea…

    python 2023年5月14日
    00
  • python列表与元组详解实例

    以下是“Python列表与元组详解实例”的完整攻略。 1. 列表和元组的概述 列表和元组都是Python中常用的结构。它们都可以用于存储多元素,但它们之间有些重要的区别。列表是可变的,可以添加、删除和修改元素,而元组是不可变的,一旦创建就不能修改。 2. 列表的实现 2.1 创建列表 我们可以使用方括号[]来创建一个空列表,或者在括号中添加元素来创建一个非空…

    python 2023年5月13日
    00
  • Python 如何实时向文件写入数据(附代码)

    下面是Python实时向文件写入数据的攻略: 1. 前言 在很多情况下,我们需要将程序中的实时数据或者日志信息写入文件,以方便后续的分析和处理。本文将介绍如何使用Python实现实时向文件写入数据的功能。 2. 实现方法 Python中实现实时向文件写入数据的方法主要有两种,分别是使用普通的文件输出流和使用logging库。下面我们将分别介绍这两种方法的实现…

    python 2023年6月3日
    00
  • 利用python如何处理nc数据详解

    使用Python处理nc数据是数据科学中的重要领域,操作非常方便且适用于各行业。下面我们来详细讲解如何利用Python处理nc数据的完整攻略。 1. 安装依赖 首先,我们需要安装几个Python的依赖: numpy: 用于处理数组 netCDF4: 用于读写nc数据 matplotlib: 用于可视化处理结果 basemap: 用于地图绘制 可以使用pip工…

    python 2023年6月3日
    00
  • Python函数参数中的*与**运算符

    Python函数参数中的和*运算符用于定义可接受任意数量的位置参数和关键字参数。 *运算符 在函数定义时使用*运算符,表示该函数可接受任意数量的位置参数。位置参数是指不带关键字的函数参数。例如: def foo(*args): print(args) foo(1, 2, 3) # 输出结果为(1, 2, 3) 在上面的示例中,我们定义了一个名为foo的函数,…

    python 2023年5月13日
    00
  • 了解 Python 相对 Epsilon

    【问题标题】:Understanding Python Relative Epsilon了解 Python 相对 Epsilon 【发布时间】:2023-03-31 23:46:01 【问题描述】: 在处理浮点错误时,我发现了 pyth 数学模块的 isclose method。此方法使用以下公式计算 a 和 b 之间的相对 epsilon: max(rel…

    Python开发 2023年4月8日
    00
  • Python中的SOLID原则实例详解

    当我们在开发Python应用程序时,遵循SOLID原则可以使得代码更加易于维护和扩展。本文将深入讲解SOLID原则及其在Python中的应用。 SOLID原则介绍 SOLID原则是面向对象设计和编程原则的一个缩写,由五条原则组成:单一职责原则(Single Responsibility Principle),开闭原则(Open-Closed Principl…

    python 2023年5月20日
    00
  • Python中处理时间的几种方法小结

    下面是针对“Python中处理时间的几种方法小结”这个主题的完整攻略: Python中处理时间的几种方法小结 时间处理在实际开发中非常常见,Python中也提供了多种处理时间的方法和模块。接下来,我们将对常用的一些方法进行小结。 1. time模块 time模块提供了一些基本的时间函数,可以用于时间戳的转换和计算等。下面是其中几个常用的函数: time() …

    python 2023年6月2日
    00
合作推广
合作推广
分享本页
返回顶部