我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python类介绍

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python类介绍

一.类的定义--class关键字

1. 类是用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。使用class语句来创建一个新类,class之后为类的名称(User)并以冒号结尾,类的组成包括成员变量(name,age)和成员函数(who),如下实例:

class User:
    name='zhzhgo'
    age=25
def who(self):
    print "I'm "+self.name


2.类属性与方法

①类的私有属性

__private_attrs:两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问。在类内部的方法中使用时:self.__private_attrs。


②类的方法

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


③类的私有方法

__private_method:两个下划线开头,声明该方法为私有方法,不能在类的外部调用。在类的内部调用时: self.__private_methods。


注意:Python不允许实例化的类访问私有数据,但可以使用 object._className__attrName 访问属性(下面代码最后两行):

class MyCounter:
    __secretCount = 0  # 私有变量
    publicCount = 0    # 公开变量
    
    def count(self):
        self.__secretCount += 1
        self.publicCount += 1
        print self.__secretCount
        
n = MyCounter()
n.count()
print n.publicCount
#print n.__secretCount  # 报错,实例不能访问私有变量
print n._MyCounter__secretCount


3. 构造方法和析构方法

__init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法。

__del__()被称为类的析构函数,__del__在对象消逝的时候被调用,当对象不再被使用时,__del__方法运行。

class User(object):
    "用户类"
    count=0
     
    def __init__(self,name,age): #构造函数
        self.name=name
        self.age=age 
        User.count+=1
        
    def who(self):
        print "My name is "+self.name+",I'm "+str(self.age)+" years old."
        
    def __del__(self): #析构函数
        class_name = self.__class__.__name__
        print class_name, "destroyed"


4. 创建实例对象

要创建一个类的实例,你可以使用类的名称,并通过__init__方法接受参数,可以使用点(.)来访问对象的属性,类的帮助信息可以通过ClassName.__doc__查看。

u1=User('zhzhgo',25) #创建实例对象u1
u2=User('zz',18) #创建实例对象u2
u1.who() #访问类方法
u2.who()
print "Total Object:"+str(User.count)
print User.__doc__ #打印帮助信息

>>> 

My name is zhzhgo,I'm 25 years old.

My name is zz,I'm 18 years old.

Total Object:2

用户类

>>> 


5.内置类属性

__doc__ :类的文档字符串

__name__: 类名

__module__: 类定义所在的模块(类的全名是'__main__.className',如果类位于一个导入模块mymod中,那么className.__module__ 等于 mymod)

__bases__ : 类的所有父类构成元素(包含了一个由所有父类组成的元组)

__dict__ : 类的属性(包含一个字典,由类的数据属性组成)

print "User.__doc__:", User.__doc__
print "User.__name__:", User.__name__
print "User.__module__:", User.__module__
print "User.__bases__:", User.__bases__
print "User.__dict__:", User.__dict__

>>> 

User.__doc__: 用户类

User.__name__: User

User.__module__: __main__

User.__bases__: (<type 'object'>,)

User.__dict__: {'count': 0, '__dict__': <attribute '__dict__' of 'User' objects>, '__module__': '__main__', '__del__': <function __del__ at 0x02BD34B0>, 'who': <function who at 0x02BD3470>, '__weakref__': <attribute '__weakref__' of 'User' objects>, '__doc__': '\xe7\x94\xa8\xe6\x88\xb7\xe7\xb1\xbb', '__init__': <function __init__ at 0x02BD3430>}

>>>


6.对象销毁(垃圾回收)

①同Java语言一样,Python使用了引用计数这一简单技术来追踪内存中的对象。在Python内部记录着所有使用中的对象各有多少引用。一个内部跟踪变量,称为一个引用计数器。当对象被创建时, 就创建了一个引用计数, 当这个对象不再需要时, 也就是说, 这个对象的引用计数变为0 时, 它被垃圾回收。但是回收不是"立即"的, 由解释器在适当的时机,将垃圾对象占用的内存空间回收。

②垃圾回收机制不仅针对引用计数为0的对象,同样也可以处理循环引用的情况。循环引用指的是,两个对象相互引用,但是没有其他变量引用他们。这种情况下,仅使用引用计数是不够的。Python 的垃圾收集器实际上是一个引用计数器和一个循环垃圾收集器。作为引用计数的补充, 垃圾收集器也会留心被分配的总量很大(及未通过引用计数销毁的那些)的对象。 在这种情况下, 解释器会暂停下来, 试图清理所有未引用的循环。

上述实例中如执行:del u1,则u1对象被销毁,打印:User destroyed

 

二.类的继承

面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。声明类的时候括号中写要继承的父类。类的继承衍生出类子类,子类可以继承或重写父类的方法,子类可以自定义新的方法或者成员变量,比如学生类可以继承用户类。

class User(object):
        "用户类"      
        def __init__(self,name,age): #构造函数
                self.name=name
                self.age=age
         
        def who(self):
                print "My name is "+self.name+",I'm "+str(self.age)+" years old."

class Student(User):
        "学生类继承用户类"
        def __init__(self,name,age,height):
                User.__init__(self,name,age)
                self.height=height
                
        def who(self):
                User.who(self)
                #super(Student,self).who()
                print "My height is "+ str(self.height)

Student("zhzhgo",25,168).who()

>>> 

My name is zhzhgo,I'm 25 years old.

My height is 168

>>> 

在python中继承的特点:

1. 在继承中基类的构造(__init__()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。

2. 在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数。

3. Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。

4. 如果父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索,即方法在子类中未找到时,从左到右查找父类中是否包含该方法。如果在继承元组中列了一个以上的类,那么它就被称作"多重继承" (继承嵌套)

class 类名(父类1,父类2,....,父类n)
     <语句1>


三.实例方法、类方法、静态方法

实例方法,类方法,静态方法都可以通过实例或者类调用,只不过实例方法通过类调用时需要传递实例的引用(python 3可以传递任意对象,其他版本会报错)

实例方法针对的是实例,第一个参数是self,普通对象方法至少需要一个self参数,代表类对象实例;类方法针对的是类,@classmethod 它表示接下来的是一个类方法,类方法的第一个参数cls,它们都可以继承和重新定义;静态方法用于作为程序中的共享资源,直接通过类去调用,不用实例化对象,不需要self参数,可以认为是全局函数,@staticmethod 它表示接下来的是一个静态方法

class Test1(object):
    def test1(self): #定义了实例方法
        print("object")
    @classmethod
    def test2(cls): #定义了类方法
        print("class")
    @staticmethod
    def test3(): #定义了静态方法
        print("static")
f1=Test1()
#f1.test1(); #通过实例调用
Test1.test1(f1) #直接通过类的方式调用,但是需要自己传递实例引用
Test1.test2()
print "--------------------"
#如果Test1有子类,并且子类覆盖了这个类方法,最终会调用子类的方法并传递子类的类对象
class Test2(Test1):
    @classmethod
    def test2(cls):
        print(cls)
        print("test2 object")
f2=Test2()
f2.test2()
print "--------------------"
f1.test3(); #使用实例调用
Test1.test3(); #直接静态方式调用

>>> 

object

class

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

<class '__main__.Test2'>

test2 object

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

static

static

>>> 



免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python类介绍

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python类介绍

一.类的定义--class关键字1. 类是用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。使用class语句来创建一个新类,class之后为类的名称(User)并以冒号结尾,类的组成包括
2023-01-31

Python 3.7:数据类的介绍

Python3.7预计在今年夏天发布,让我们一起偷瞄一眼它带来的新功能吧!如果你经常一个人在家用Pycharm撸代码,请确保将你的Pycharm升级到2018.1版本。(等你读完本文再升级也来得及)。Python3.7版本包含了众多新特性:
2023-01-31

python介绍

python是一门优秀的综合语言,python的宗旨是简明,优雅,强大,在人工智能,云计算,金融分析,大数据开发,web开发,自动化运维,测试等方向应用广泛,已是全球第4大最流行的语言目前python主要应用领域: web开发--最火的py
2023-01-30

python基本数据类型的介绍

int(整型)在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-922337203685
2023-01-31

详细介绍Python的鸭子类型

鸭子类型基本定义首先Python不支持多态,也不用支持多态,python是一种多态语言,崇尚鸭子类型。 以下是维基百科中对鸭子类型得论述: 在程序设计中,鸭子类型(英语:duck typing)是动态类型的一种风格。在这种风格中,一个对象有
2022-06-04

Python模块的几种类型介绍

这篇文章主要介绍“Python模块的几种类型介绍”,在日常操作中,相信很多人在Python模块的几种类型介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python模块的几种类型介绍”的疑惑有所帮助!接下来
2023-06-17

Python中数据类型的详细介绍

这篇文章主要讲解了“Python中数据类型的详细介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python中数据类型的详细介绍”吧!目录1、字符串2、布尔类型3、整数4、浮点数5、数字6
2023-06-02

Python中类型检查的详细介绍

前言 大家都知道Python 是一门强类型、动态类型检查的语言。所谓动态类型,是指在定义变量时,我们无需指定变量的类型,Python 解释器会在运行时自动检查。 与静态类型语言(如 C 语言)相比,这不仅仅是少写了几个类型声明字符:#inc
2022-06-04

数据类型介绍

目录 什么是数据类型?(掌握) 为何对数据分类?(掌握) 不同数据类型(掌握) 首先让我们回顾变量是什么:变量用来记录世界的状态。创建计算机的目的就是想
2023-01-31

介绍几款 Python 类型检查工具

近日,微软在 Github 上开源了一个 Python 静态类型检查工具:pyright ,引起了社区内的多方关注。微软在开源项目上的参与力度是越来越大了,不说收购 Github 这种大的战略野心,只说它家开源的 VS Code 编辑器,在
2023-01-31

istringstream、ostringstream、stringstream类介绍

istringstream、ostringstream和stringstream类都是C++标准库中的流类,用于处理字符串。它们都是继承自基类istringstream、ostringstream和stringstream。1. istri
2023-08-24

Python IDE介绍

1 PyCharmPyCharm 是 JetBrains 开发的 Python IDE。PyCharm用于一般IDE具备的功能,比如, 调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制……另外,PyCha
2023-01-31

python---argparse介绍

是python的一个命令行解析包,非常编写可读性非常好的程序prog.py是我在Linux的下测试argparse的文件,放在/ TMP目录下,其内容如下:#!/usr/bin/env python# encoding: utf-8impo
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录