python类的简单定义和使用

2023-10-27

http://www.01happy.com/python-class-define-use/

python中类的声明使用关键词class,可以提供一个可选的父类或者说基类,如果没有合适的基类,那就用object作为基类。

定义格式:

class 类名(object):
    "类的说明文档"
    属性
    初始方法__init__
    其他方法

和其他面向对象语言不太一样的地方:

  1. 属性没有公有和私有的说法。
  2. 没有构造方法,初始方法只是在实例化时会执行的方法。
  3. 定义方法时必须带上self参数,类似java里的this。

简单的示例

#-*- coding: utf-8 -*-  
#coding=utf-8 

class User(object):  
    "This is user class."  
  
    name = "tom"  
  
    age = 0  
  
    def __init__(self, age=22):  
        self.age = age  
  
    def showAge(self):  
        print self.age  
  
    def showClassName(self):  
        print self.__class__.__name__  
  
    def showClassDoc(self):  
        print self.__class__.__doc__  

#实例化类
user = User()  
#调用类中成员
print user.name  
#调用类中方法
user.showAge()  
#获取类名称
user.showClassName()  
#获取类的说明文档
user.showClassDoc()  

------------------------------------------------------------------------------------------------------------------------

http://blog.csdn.net/wklken/article/details/6313265

Python笔记——类定义

一、类定义:

class <类名>:

    <语句>

 

类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性

如果直接使用类名修改其属性,那么将直接影响到已经实例化的对象

 

类的私有属性:

__private_attrs  两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问

在类内部的方法中使用时 self.__private_attrs

 类的方法

在类地内部,使用def关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数self,且为第一个参数

私有的类方法

__private_method 两个下划线开头,声明该方法为私有方法,不能在类地外部调用

在类的内部调用slef.__private_methods

类的专有方法:

__init__  构造函数,在生成对象时调用

__del__   析构函数,释放对象时使用

__repr__ 打印,转换

__setitem__按照索引赋值

__getitem__按照索引获取值

__len__获得长度

__cmp__比较运算

__call__函数调用

 

__add__加运算

__sub__减运算

__mul__乘运算

__div__除运算

__mod__求余运算

__pow__称方

示例:

#-*- coding: utf-8 -*-    
#coding=utf-8   
  
#类定义  
class people:  
    #定义基本属性  
    name = ''  
    age = 0  
    #定义私有属性,私有属性在类外部无法直接进行访问  
    __weight = 0  
    #定义构造方法  
    def __init__(self,n,a,w):  
        self.name = n  
        self.age = a  
        self.__weight = w  
    def speak(self):  
        print("%s is speaking: I am %d years old" %(self.name,self.age))  
  
  
p = people('tom',10,30)  
p.speak()

二、继承类定义:

1.单继承

class <类名>(父类名)

   <语句>

eg.

class childbook(book)

    age = 10

#-*- coding: utf-8 -*-    
#coding=utf-8  

#单继承示例
#类定义  
class people:  
    #定义基本属性  
    name = ''  
    age = 0  
    #定义私有属性,私有属性在类外部无法直接进行访问  
    __weight = 0  
    #定义构造方法  
    def __init__(self,n,a,w):  
        self.name = n  
        self.age = a  
        self.__weight = w  
    def speak(self):  
        print("%s is speaking: I am %d years old" %(self.name,self.age))  
  
  
p = people('tom',10,30)  
p.speak() 

class student(people):  
    grade = ''  
    def __init__(self,n,a,w,g):  
        #调用父类的构函  
        people.__init__(self,n,a,w)  
        self.grade = g  
    #覆写父类的方法  
    def speak(self):  
        print("%s is speaking: I am %d years old,and I am in grade %d"%(self.name,self.age,self.grade))  
  
  
  
s = student('ken',20,60,3)  
s.speak()

2.类的多重继承

class 类名(父类1,父类2,....,父类n)

     <语句1>

需要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索

即方法在子类中未找到时,从左到右查找父类中是否包含方法

#-*- coding: utf-8 -*-    
#coding=utf-8  

#单继承示例
#类定义  
class people:  
    #定义基本属性  
    name = ''  
    age = 0  
    #定义私有属性,私有属性在类外部无法直接进行访问  
    __weight = 0  
    #定义构造方法  
    def __init__(self,n,a,w):  
        self.name = n  
        self.age = a  
        self.__weight = w  
    def speak(self):  
        print("%s is speaking: I am %d years old" %(self.name,self.age))  
  
  
p = people('tom',10,30)  
p.speak() 

class student(people):  
    grade = ''  
    def __init__(self,n,a,w,g):  
        #调用父类的构函  
        people.__init__(self,n,a,w)  
        self.grade = g  
    #覆写父类的方法  
    def speak(self):  
        print("%s is speaking: I am %d years old,and I am in grade %d"%(self.name,self.age,self.grade))
  
s = student('ken',20,60,3)  
s.speak()

#另一个类,多重继承之前的准备  
class speaker():  
    topic = ''  
    name = ''  
    def __init__(self,n,t):  
        self.name = n  
        self.topic = t  
    def speak(self):  
        print("I am %s,I am a speaker!My topic is %s"%(self.name,self.topic))  
  
#多重继承  
class sample(speaker,student):  
    a =''  
    def __init__(self,n,a,w,g,t):  
        student.__init__(self,n,a,w,g)  
        speaker.__init__(self,n,t)  
  
test = sample("Tim",25,80,4,"Python")  
test.speak()#方法名同,默认调用的是在括号中排前地父类的方法  

类方法的覆写——子类覆盖掉父类的方法

def 方法名与父类一致

若是在方法中要使用到父类方法 父类名.方法名

 

若是将类放到了模块中

 

使用时

import A

l = A.类()

以上三段程序的执行结果:


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python类的简单定义和使用 的相关文章

  • 阅读论文的方法

    清单一 系统阅读论文的方法 1 试着找个安静的地方呆上几个小时 拿上你最喜欢的饮料 可能是咖啡 茶 或者别的什么东西 我经常在咖啡厅里工作 2 从阅读标题和摘要开始 目的是获得论文的高层次概述 作者的主要目标是什么 以及一些实验结果 摘要通

随机推荐

  • 华为OD机试真题B卷 Java 实现【计算礼品发放的最小分组数目】,附详细解题思路

    一 题目描述 又到了一年的末尾 项目组让小明负责新年晚会的小礼品发放工作 为使得参加晚会的同时所获得的小礼品价值相对平衡 需要把小礼品根据价格进行分组 但每组最多只能包括两件小礼品 并且每个分组的价格总和不能超过一个价格上限 为了保证发放小
  • npm WARN enoent ENOENT: no such file or directory, open 'C:\Users\licc\package.json'

    问题描述 在项目中使用npm安装gulp时报异常 node modle文件夹出不来 异常输出如下 npm WARN enoent ENOENT no such file or directory open C Users licc pack
  • yolov5+opencv+java:通过DJL在maven项目中使用yolov5的小demo

    目录 前言 环境 导出yolov5s模型 编写Maven项目 编写pom xml文件 引入opencv依赖 下载opencv 获取opencv的jar包和动态链接库dll文件 将lib文件夹添加为Library 将yolov5权重文件放到资
  • C 中strcpy和memcpy的区别

    参考博客 https blog csdn net zcyzsy article details 53190691 https www cnblogs com metootxy p 3185000 html 一 以下是具体使用memcpy这个
  • 浅谈 Computed和Watch的区别

    computed 计算属性 类似于过滤器 对绑定到试图的数据进行处理 并监听变化进而执行对应的代码 基于它的依赖缓存 只有相关依赖发生改变时才会重新取值 而使用methods时 在重新渲染的时候 函数总会重新调用执行 computed属性默
  • Linux 虚拟化网络技术 — 虚拟网线(Veth-pair)

    虚拟网线 Veth pair Veth pair 不是一个设备 而是一对设备 作为虚拟网线用于连接两个虚拟网络设备 veth pair 是根据数据链路层的 MAC 地址对网络数据包进行转发的过程来实现的 本质是反转通讯数据的方向 需要发送的
  • C++Easyx教程(一)——如何在DEV-C++里安装Easyx库

    本文作者 C 橙羊 本文代码适合编译环境 DEV C 温馨提示 此文乃作者心血 如要转载请标注版权 否则视为抄袭 今天就算是我们Easyx教程的第一篇博文的诞生日了 那么今天橙羊就教大家如何在DEV C 里安装Easyx图形库 这里我用的是
  • 电子学会青少年C语言一级通过

    复习一级时 看了很多printf格式 整型 浮点型之类的问题 这就是考级 什么都考 覆盖面广 但考完不一定常用 计划继续报二级 主要考数组和字符串 三级开始考算法 其实可以考虑跨级报考 因为感觉每个级的内容相对独立 有人考了一级就考四级 五
  • 蛋白质结构域的概念_怎么查询蛋白质的全部信息 UniProKB数据库

    今天给大家介绍一个数据库 UniProKB数据库 网址http www uniprot org 这个数据库对于查询蛋白质相关信息还是很全面的 比如我们想要查询人类p53蛋白的主要功能 结构域 翻译后的修饰和参与的代谢途径 以及与它相互作用的
  • HTTP1.0和HTTP1.1

    什么是HTTP http是一个超文本传输协议 它是基于TCP协议的应用层传输协议 简单点说就是客户端和服务端进行数据传输的一种规则 http是一个无状态协议 它本身不会对发送过得请求和响应的通信状态进行持久化处理 这样做的目的是为了保持ht
  • 高效扩展性的全新Apple Mac Pro:专为专业工作流程与编程而设计

    随着科技的不断发展和专业工作需求的增加 全新的Apple Mac Pro应运而生 这款Mac Pro具备卓越的性能和出色的扩展功能 为专业人士提供了一个强大的工作平台 本文将探讨Mac Pro的特点 并提供一些适用于专业工作流程和编程的源代
  • 原生js实现分页功能

    原生就是实现分页功能 代码如下 var pagination function option fun this parentId option id 容器 this pageSize option pageSize 1 每页显示多少条 th
  • 参数校验(javax.validation)学习

    一 应用场景 页面表单有很多字段需要提交 因此使用注解校验的方式针对pojo的属性进行校验 因此使用javax标准以及org hibernate的validator的注解校验 二 依赖
  • Java面试题收集(三)

    目录 1 Java7 8 中的 HashMap 和 ConcurrentHashMap 全解析 2 Spring的AOP关于拦截private 3 项目中的数据字典缓存实现方式 4 分布式缓存 5 如何保证分布式数据最终一致性 6 spri
  • 已证实!这就是抗击疫情最有效的“药物”!

    不 出 门
  • Python如何添加日志输出

    导入logging模块 import logging 创建一个日志器 就是一个logger对象 logger logging getLogger logger 设置logger输入级别 logger setLevel logging DEB
  • python简单实现网络爬虫

    前言 在这一篇博客中 我会用python来实现一个简单的网络爬虫 简单的爬取一下一些音乐网站 小说网站的标题 关键字还有摘要 所以这个爬虫并不是万能爬 只针对符合特定规则的网站使用 只使用于爬标题 关键字和摘要的 所以只能爬在head标签中
  • 奇门遁甲原始宫位图_奇门遁甲排盘方法和步骤

    阅读本文前 请您先点击上面的蓝色字体 撩到阴阳 再点击 关注 这样您就可以免费收到文章 免费订阅 请放心关注 奇门遁甲真传 一 起局方法 拆补法 1 阴遁起局方法 夏至以后用阴遁 奇门遁甲是宇宙学 是时间和空间相结合的一门学问 所以我们必须
  • C++批量文件重命名

    include
  • python类的简单定义和使用

    http www 01happy com python class define use python中类的声明使用关键词class 可以提供一个可选的父类或者说基类 如果没有合适的基类 那就用object作为基类 定义格式 class 类