Python 类的基本定义详解

Python中如何定义类? 类(class)和对象(object,也被称为示例,instance) —类是某一批对象的抽象,可以把类理解成某种概念 —对象才是一个具体的东西 定义类的语法:class类名 执行语句 零个到多个类变量 零个到多个方法(实例方法) —类体中的执行语句,会在定义类时自动执行 —如果类体中没有任何代码(就是定义一个空类),要使用pass语句作为占位符 —————定义类的方法和我们定义函数的方法基本上是... 阅读详情

【摘要】Python是一种面向对象的语言,稍微复杂一点的程序,都应该采用类来进行设计,以使程序结构更加清晰,易于把控。本文将讨论单类的基本内容定义,以后的博文再讨论其它。

 

一. 成员的访问范围:

Python中的类,其实就是执行代码块,这一点很重要,所有位于 class 语句中的代码,都是在特殊的类命名空间中执行的,这个类命名空间可由类内所有实例成员访问。

类内成员包括类成员(用类名来访问),实例成员(用self 或 实例对象变量来访问)。

Python语言本身对成员的访问范围控制不是很严格,更是一种对程序员的提醒或约定,请不要在外部使用保护成员及私有成员。以下是实例成员的访问范围的定义约定;如果是类成员,应该都是公用的,否则,请不要把它定义为类成员。

类型

名称

python 中的定义方法

举例

可访问范围

public

公用成员

不加入任何特殊字符

member

类实例,继承类,当前类内部

protected

保护成员

加一个下划线

_member

继承类,当前类内部

private

私有成员

加二个下划线

__member

当前类内部

 

二. 类成员的定义详解:

成员名称

说明

举例

类本身

类名的命名规范为 CamelCase

每个单词都以大写字母开头,单词之间没有分隔符

class DemoClass:

构造函数

创建类实例时,将触发执行

def __init__(self):

析构函数

由系统的垃圾回收机制来自动执行,程序无法控制它何时执行,请谨慎使用

def __del__(self):

类代码

  1. 直接定义在类范围,不定义在任何方法中
  2. 触发执行:第一次实例化对象,或第一次调用类成员

class DemoClass:

    print('Class 执行代码块开始执行了, 但整个过程只执行一次!')

类字段(类特性)

 

  1. 直接定义在类范围,不定义在任何方法内
  2. 访问方法: DemoClass.class_scope_field
  3. 任何类实例,访问的都是同一个类字段
  4. self.class_scope_field的初始值为DemoClass.class_scope_field,  但随后的改动,将被绑定在 self 实例范围,跟类本身没有关系

class DemoClass

   class_scope_field = “类作用域字段”

类方法

  1. 带装饰器 @classmethod的函数
  2. 第一个参数一定为cls
  3. 访问方式:DemoClass.class_method(),不带 cls参数
  4. 不能访问 self成员
  5. 可以通过cls, 直接访问类成员

@classmethod

def class_method(cls):

    print("类方法: classmethod_hello()")

静态方法

  1. 带装饰器 @staticmethod
  2. 不带任何固定参数
  3. 访问方式: DemoClass.static_method()
  4. 不能访问self成员
  5. 静态方法就是普通的函数,只不过碰巧定义在了类里,而不是模块层。因此,完全可以将其放在跟类同模块的类定义前面或后面

@staticmethod

def static_method():

    print('静态方法: static_hello')

成员字段(成员特性)

  1. 在成员方法中,前面加self进行定义
  2. 按PEP8规范,所有成员字段,应该定义在 def __init__(self)方法中
  3. 通过加下划线,约定访问范围
  4. 访问方式: 通过self 或 实例对象变量名来访问

          self.__private_field

          demo_instance.public_field

def __init__(self, class_name):

    print("构造函数:__init__()")

    self.public_field = "公用字段"

    self._protected_field = "受保护字段"

    self.__private_field = "私有字段"

    self._name = class_name

 

成员方法

  1. python的函数,第一个参数一定为self
  2. 通过加下划线,约定访问范围
  3. 可通过self访问所有实例成员
  4. 访问方式: 通过self 或 实例对象变量名来访问,访问时,带( ), 不需要带self参数

           self.__private_method( )

           demo_instance.public_method( )

def public_method(self):

def _protected_method(self):

def __private_method(self):

 

成员属性(读)

  1. 带装饰器 @property的成员方法
  2. 可在返回结果前,进行逻辑控制处理,并屏蔽内部的字段命名
  3. 访问范围,按设计初衷,成员属性一般应该是公用的
  4. 访问方式,通过 self 或 实例对象变量名来访问,访问时,不带(),跟字段一样,直接使用

          self.public_property

          demo_instance.public_property

@property

def public_property(self):

    return self._name.upper()

成员属性(写)

  1. 带装饰器 @指定属性名.setter的成员方法
  2. 方法名称跟对应的成员属性名称一致
  3. 第二个参数,为传入值参数
  4. 对传入值可以进行逻辑处理,然后赋值给类的成员字段
  5. 访问范围,跟对应的成员属性一致
  6. 访问方式,通过 self 或 实例对象变量名来访问,只支持赋值,跟字段赋值一样        

self.public_property = ‘new property’

demo_instance.public_property = “new property 2”

@public_property.setter

def public_property(self, value):

    self._name = value.lower()

 

三. 实例代码及演示:

# coding:utf-8
# -----------------------------------------------------------------------------
# Comments  : 演示说明python类的基本成员定义及使用
# Developer : Edwin.Zhang
# Date      : 2018-8-28
# -----------------------------------------------------------------------------

def normal_method():
    print("*.调用正常函数:normal_hello()")


# 类名的命名规范为: CamelCase
class DemoClass:
    print('【演示】Class 执行代码块开始执行了, 但整个过程只执行一次!\n')

    class_scope_field = "类作用域字段"

    def __init__(self, class_name):
        print("构造函数:__init__()")
        self.public_field = "公用字段"
        self._protected_field = "受保护字段"
        self.__private_field = "私有字段"
        self._name = class_name

    def __del__(self):
        print("析构方法:__del__() for [" + self._name + "],  什么时候被调用,不确定,请谨慎使用!")

    @property
    def public_property(self):
        return self._name.upper()

    @public_property.setter
    def public_property(self, value):
        self._name = value.lower()

    def public_method(self):
        print('*.公用方法:public_hello() : ' + self.public_field + " " + self.public_property)

    def _protected_method(self):
        print('*.受保护方法:_private_hello() : ' + self.__private_field)

    def __private_method(self):
        print('*.私有方法:_private_hello() : ' + self.__private_field)

    @classmethod
    def class_method(cls):
        print("*.类方法: classmethod_hello()")
        print("*.类方法访问 " + cls.class_scope_field)

    @staticmethod
    def static_method():
        print('*.静态方法: static_hello')

    def internal_call(self):
        self.public_method()
        self._protected_method()
        self.__private_method()

        self.class_method()
        self.static_method()

        DemoClass.class_method()
        DemoClass.static_method()

        normal_method()

        self.public_property = "new setting property"
        print("*.访问公共属性 :" + self.public_property)
        print("*.通过self, 访问:" + self.class_scope_field)
        print("*.通过类名, 访问:" + DemoClass.class_scope_field)


def demo0():
    print(DemoClass.public_property)


def demo1():
    instance = DemoClass('My Demo Class')

    print("\n【演示】类内部,调用的成员")
    instance.internal_call()

    print("\n【演示】通过对象实例,调用的方法")
    instance.public_method()
    instance.class_method()
    instance.static_method()

    print("\n【演示】通过对象实例,访问字段及属性")
    print(instance.public_field)
    print(instance.public_property)
    instance.public_property = "new class name"
    print(instance.public_property)

    print("\n【演示】通过类名,访问类字段及类方法")
    print(DemoClass.class_scope_field)
    DemoClass.class_method()
    DemoClass.static_method()


def demo2():
    print("\n\n\n【演示2】类型字段可以在多个类实例共享,若绑定到self并修改,则只作用于当前实例")
    print("Case 1 : \n*.实例初始化时: 两者一致")
    ins1 = DemoClass("Instance 01")
    print("ins1.class_scope_field = " + ins1.class_scope_field)
    print("DemoClass.class_scope_field = " + DemoClass.class_scope_field)

    print("\n*.基于(实例)修改后, 成员已经绑定self, 两者不一致")
    ins1.class_scope_field = "基于(实例)修改类作用域字段"
    print("ins1.class_scope_field = " + ins1.class_scope_field)
    print("DemoClass.class_scope_field = " + DemoClass.class_scope_field)

    print("\n*.基于类修改后:(已经发生基于(实例)修改过):两者不一致")
    DemoClass.class_scope_field = "基于类修改类作用域字段"
    print("ins1.class_scope_field = " + ins1.class_scope_field)
    print("DemoClass.class_scope_field = " + DemoClass.class_scope_field)
    print("")

    print("\nCase 2 : \n*.创建新的实例:开始两者一致,为类成员当前值")
    ins2 = DemoClass("Instance 02")
    print("ins2.class_scope_field = " + ins2.class_scope_field)
    print("DemoClass.class_scope_field = " + DemoClass.class_scope_field)

    print("\n*.基于类修改后:(没有基于(实例)修改过),两者一致,为更新值")
    DemoClass.class_scope_field = "基于类修改类作用域字段 (新)"
    print("ins1.class_scope_field = " + ins2.class_scope_field)
    print("DemoClass.class_scope_field = " + DemoClass.class_scope_field)
    print("")

    print("\nCase 3: \n*.创建新的实例:两者一致,为类成员的更新值")
    ins3 = DemoClass("Instance 03")
    print("ins2.class_scope_field = " + ins3.class_scope_field)
    print("DemoClass.class_scope_field = " + DemoClass.class_scope_field)
    print("")


if __name__ == "__main__":
    demo0()
    demo1()
    demo2()

 

【python】类的完整定义 在 Python 中,类的完整定义包括几个关键部分,例如初始化方法、实例方法、类属性、实例属性、继承、静态方法、类方法等。species = "Unknown" # 类属性:所有实例共享的属性"""初始化方法,用于设置实例属性:param name: 实例的名称:param age: 实例的年龄"""self.name = name # 实例属性self.age = age # 实例属性"""实例方法:每个实例都可以调用的方法,定义该实例的行为"""""" 阅读详情

相关推荐

Python 中调用方法内部定义的类详解(类在方法中的各种操作)

在 Python 中,可以在函数或方法内部定义类,这种类被称为"局部类"或"嵌套类"。​​作用域限制​​:内部类只在方法的作用域内可见​​访问外部变量​​:可以访问方法内的局部变量(Python 3 中使用 nonlocal 关键字)​​动态性​​:每次调用方法都会重新定义类。

数据知道的博客 1万+

Python基础知识

Python基础知识 Task7:类、对象与魔法方法 一、类 1.对象=属性+方法 对象是类的实例。类主要定义对象的结构,然后我们以类为模板创建对象。类不但包含方法定义,而且还包含所有实力共享的数据。 使用关键字class定义Python类,关键字后面紧跟类的名称、分号和类的实现。 封装:信息隐蔽技术 class Turtle: #Python中的类名约定以大写字母开头 """关于类的一个简单例子""" #属性 color = 'green' weight = 10

superplumblossm的博客 422

【数据集】waymo motion dataset介绍与数据解析可视化

waymo motion数据集下载,数据描述,数据特征和地图特征,数据解析并完成数据可视化

shuaixio的博客 5180

Python类的定义和使用

优秀是一种属性,只要我们这类努力学习的人才能调用,带大家一起学习类的定义与使用(一起努力,咱们顶峰相见)

精益求精,永无止境,永远在路上! 11万+

122、Android Camera HAL3 框架:Request、Result、Metadata 的异步管道模型

本文深入剖析了Android Camera HAL3框架中的异步管道模型,围绕Request、Result和Metadata三个核心要素展开。作者通过实际案例(黑屏闪退问题)切入,揭示了异步模型中常见的帧序错乱陷阱。文章详细阐释了三个角色的交互机制,指出HAL3采用生产者-消费者模式的关键特征:Request与Result一一对应但不保证顺序。针对开发实践,总结了三个必须加锁的场景和回调函数的锁使用禁忌,并给出解决帧序问题的具体方案(独立帧号生成器)。最后提出五项经验性建议,强调异步模型带来的灵活性与复杂性

sundong_81的博客 214

Debezium 性能调优实战:吞吐量、延迟与资源平衡

摘要: 本文分享了团队如何通过系统性调优将Debezium从初始3,200 TPS/2.8秒延迟提升至15,200 TPS/210ms延迟的实战经验。优化涵盖四个层面:1)Debezium连接器配置(批处理、快照并行、消息精简);2)Kafka分区策略与Avro序列化缓存;3)JVM改用ZGC及OS参数调优;4)MySQL的binlog与I/O优化。关键发现包括分区数黄金公式、sync_binlog调整带来56%的I/O负载下降,以及避免盲目增大队列内存等陷阱。最终实现吞吐量提升4.75倍,并强调性能调优需

爱丹丹的博客 358

python类--定义及使用(类的属性及方法)

python类的基础知识:类定义(变量、方法)及使用(创建对象) 详细介绍了类的属性、实例属性、类方法、静态方法、实例方法; 详细介绍了类的三大特性:封装、继承、多态

weixin_42639395的博客 3万+

如何在白平衡标定种构建不同类型的白平衡色温坐标系

以各家芯片方案的白平衡色温坐标系为切入点,详细介绍了各家芯片色温坐标系构建的理论依旧;并解析了不同色温坐标系下的物理含义,提提出了多种不同的色温坐标系

大熊 959

【Python详解】Python类的详细定义与使用案例

【Python详解】Python类的详细定义与使用案例

努力才是唯一的入场券。 7万+

PyTorch实战(19)——变分自编码器(Variational Autoencoder,VAE)

变分自编码器 (Variational Autoencoder, VAE) 是一种结合了自编码器和概率建模的生成模型,通过编码器将输入数据映射到潜在空间中的概率分布,并通过解码器将从潜在空间采样得到的潜在变量映射回原始数据空间,实现了数据的生成和特征学习。本节中,将介绍变分自编码器的基本概念,并使用 PyTorch 实现变分自编码器生成新图像。

盼小辉丶的博客 2891

逻辑判断1-逻辑基础知识

判断推理学习笔记

小y的学习笔记 2132

(27)python类的定义和使用

面向对象初步 面向对象(Object oriented Programming,OOP)编程的思想主要是针对大型软件设计而来的。面向对象编程使程序的扩展性更强、可读性更好,使的编程可以像搭积木一样简单。 面向对象编程将数据和操作数据相关的方法封装到对象中,组织代码和数据的方式更加接近人的思维,从而大大提高了编程的效率。 Python 完全采用了面向对象的思想,是真正面向对象的编程语言,完全支持面向...

欢迎来到关关雎鸠儿的博客 2万+

PowerShell 升级到 v7 并设置为默认版本(详细操作指南)

本文详细介绍了如何将PowerShell升级到v7并设为默认版本。PowerShell 7基于.NET Core构建,具有跨平台支持、性能优化和新语法特性等优势。文章提供了多种安装方法(MSI安装包、包管理器)和设置默认版本的方案(修改PATH、创建符号链接、配置编辑器等),同时涵盖企业批量部署解决方案和常见问题处理。通过升级到PowerShell 7,用户可以获得更强大的命令行体验,适用于开发、运维和自动化场景。

huluang的专栏 4292

python类定义的讲解_python类定义的讲解

python类定义的讲解是怎么定义类的,看了下面的文章大家就会了,不用多说,开始学习。一、类定义:代码如下:class :类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性。如果直接使用类名修改其属性,那么将直接影响到已经实例化的对象类的私有属性:__private_attrs 两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问。在类内部的方法中使用时 se...

weixin_39617484的博客 133

PointNet++改进策略目录

后续我将如何使用文章中创新点加入的PointNet++中代码实现部分进行更新。

u012901740的博客 2196

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

python如何定义类_详解Python中类的定义与使用

类顾名思义,就是一类事物、或者叫做实例,它用来描述具有共同特征的一类事物。我们在python中声明类的关键词是class,类还有功能和属性,属性就是这类事物的特征,而功能就是它能做什么,也是就是方法或者函数。我们仍然用例子来说明问题。目标:1.类的定义2.父类,子类定义,以及子类调用父类3.类的组合使用4.内置功能1.类的定义代码如下:#!/usr/bin/env python#coding:ut...

weixin_39844963的博客 1431

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Python类中变量定义详解

Python中的类可以定义两种类型的变量:类变量和实例变量。类变量(Class Variables): 类变量是在类级别上定义的变量,它们是对所有实例共享的。这意味着类变量只有一个副本,无论你创建了多少个类的实例,类变量的值都是相同的。如果你通过任意一个实例或者类本身改变了类变量的值,这个改变对所有实例都是可见的。

Summer的博客 4146

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Python笔记——类定义

Python笔记——类定义 一、类定义: class : 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性 如果直接使用类名修改其属性,那么将直接影响到已经实例化的对象 类的私有属性: __private_attrs 两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问 在类内部的方法中使用时 self.__private_attrs

wklken的笔记 12万+

Python类的定义

必须知道的概念 类 Class: 用来描述具体相同的属性和方法的对象的集合。定义了该集合中每个对象所共有的属性和方法。对象是类的示例。 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。 实例变量:定义在方法中的变量,只作用于当前实例的类。 数据成员:类变量或者实例变量用于处理类及其实例对象的相关数据。 方法:类中定义的函数。在类内...

步步拾遗 1万+

python如何定义类_python中定义类

广告关闭腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元!类的定义python中,定义类是通过class关键字,例如我们定义一个存储学生信息的类:class student(object):passclass后面紧接着是类名,即student,类名通常是大写开头的单词,紧接着是(object),表示该类是从哪个类继承下来的。 通常,如果没有...

weixin_39583162的博客 6899

python如何定义类

本人是c++选手,正在随机学习python,记录一些感悟。在创建类的实例时,需要使用 = 来赋值,而不是直接使用类名。例如,my_instance = MyClass()。不能删去类内函数的self。

qq_52521222的博客 888

python定义类有什么用_Python类的定义与使用

类最基本的功能就是定义了一个新的类型。可以使用下面的语法来定义一个空类,即一个什么属性都没有的类,一个什么事情也做不了的类。class 类名:pass这里的类名要求和变量名一样,可以由字母、数字和下划线组成,一般首字符是大写的字母,对于长度没有限制。类定义完之后便可以使用该类来创建实例,方法如下:实例对象名 = 类名()下面定义一个类 Student,并且使用该类创建一个实例对象 student_...

weixin_39812533的博客 1234

PYTHON 类定义,属性,初始化

文章目录PYTHON 类定义,属性,初始化类定义类的私有属性类方法类的初始化和析构初始化析构 PYTHON 类定义,属性,初始化 为了代码的编写方便简洁,引入了类的定义; 一般,使用 class 语句来创建一个新类,class之后为类的名称(通常首字母大写)并以冒号结尾,例如: 类中可以定义所使用的方法,类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名...

Limit_Fly的博客 8392

Python类定义与实例初始化详解

代码复用 模块化和组织性 多态性 2. 类的执行时机 类定义时的执行顺序 3. __init__方法详解 __init__的作用 为什么需要__init__ __init__的执行阶段 实际应用示例 4. 总结要点 概念 说明 执行时机 类定义 创建类的蓝图 模块加载时或遇到class语句时 __init__方法 实例初始化方法 创建实例时自动调用 类属性 属于类的变量 类定义时创建 实例属性 属于实例的变量 __init__中或实例方法中创建 关键点:

我的博客 1135

python中定义类详解_Python类定义和类继承详解

一、类定义:class :类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性如果直接使用类名修改其属性,那么将直接影响到已经实例化的对象类的私有属性:__private_attrs 两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问在类内部的方法中使用时 self.__private_attrs类的方法在类地内部,使用def关键字可以为类定义一个方法,与一般...

weixin_34177886的博客 403

python 类的基本定义

class Dog(): '''一次模拟小狗的简单尝试''' def _init_(self,name,age): '''初始化属性name和age''' self.name=name self.age=age def sit(self): '''模拟小狗被命令时蹲下''' p...

X_xZ_project的博客 582
上一篇: Redis 键名的设计
下一篇: 可作决策的人工智能
快乐清风客
博客等级 码龄19年 191粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值