iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >#3 Python面向对象(二)
  • 433
分享到

#3 Python面向对象(二)

面向对象Python 2023-01-30 23:01:26 433人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

前言 上一节主要记录面向对象编程的思想以及python类的简单创建,这节继续深入类中变量的相关知识,Here we Go! Python中类的各种变量 1.1 类变量 类变量定义:在类中,在函数体(方法)外的变量称为类变量。类变量在整个类

前言

上一节主要记录面向对象编程的思想以及python类的简单创建,这节继续深入类中变量的相关知识,Here we Go

Python中类的各种变量

1.1 类变量

类变量定义:在类中,在函数体(方法)外的变量称为类变量。类变量在整个类中是公用的

类变量初始化:按照以上定义,类变量的初始化如下

1 class Doctor:
2     '''
3     类变量的初始化
4     '''
5     salary = 100  # salary为类变量
6 
7     def talk():
8         print('I am a doctor')

类变量访问:因为类变量在整个类中是公用的,所以在不同的环境下都能访问。在类中函数体外直接使用 类变量 访问;在类中函数体内使用 类.类变量 或者 实例.类变量 访问;在类外使用 类.类变量 或者 实例.类变量访问

class Doctor:
    '''
    在类中函数体外访问类变量salary
    '''
    salary = 100
    print(salary)

    def talk(self):
        print('I am a doctor')


lisi = Doctor()   # 一旦实例化后,就会自动按顺序执行类中函数体外的代码


# 运行结果:
100
class Doctor:
    '''
    在类中函数体内访问类变量salary
    '''
    salary = 100

    def talk0(self):
        '''
        使用类.类变量访问
        '''
        print('My salary is {0}'.fORMat(Doctor.salary))

    def talk1(self):
        '''
        使用实例.类变量访问
        '''
        print('My salary is {0}'.format(self.salary))


lisi = Doctor()

lisi.talk0()
lisi.talk1()


# 运行结果:
My salary is 100
My salary is 100
class Doctor:
    '''
    在类外访问类变量salary
    '''
    salary = 100

    def talk(self):
        print('I am a doctor')


lisi = Doctor()
print(Doctor.salary)  # 使用 类.类变量 访问
print(lisi.salary)   # 使用 实例.类变量 访问


# 运行结果:
100
100

1.2 实例变量

实例变量定义:在类中,在函数体(方法)内的变量称为实例变量。

实例变量初始化:按照上面定义,实例变量的初始化如下

1 class Doctor:
2     '''
3     初始化实例变量
4     '''
5 
6     def talk(self):
7         self.sentence = 'I am man'    # self.sentence 为实例变量

实例变量访问:实例变量在整个类中并不是公用的,所以其访问范围有限。在类中函数体内使用 实例.实例变量 访问;在类外使用 实例.实例变量 访问

class Doctor:
    '''
    类中函数体内的访问
    '''

    def talk(self):
        self.sentence = 'I am man'    # 初始化实例变量self.sentence
        print(self.sentence)   # 访问实例变量


lisi = Doctor()

lisi.talk()  # 调用talk方法


# 运行结果:
I am man
class Doctor:
    '''
    类外访问实例变量
    '''

    def talk(self):
        self.sentence = 'I am man'    # 初始化实例变量self.sentence


lisi = Doctor()

lisi.talk()  # 必须先执行talk方法才能访问talk方法里面的实例变量
print(lisi.sentence)  # 类外访问实例变量

1.3 类变量、实例变量与全局变量、局部变量的异同点

Python基础教程中讲解了全局变量与局部变量的相关知识,本节提到的两个变量与它们有什么异同呢?

  • 绝对来说,类变量与实例变量都是局部变量

  • 相对来说,在类中,类变量相当于全局变量,但实例变量并不相当于局部变量,更不相当于全局变量

  • 相对来说,在实例中,类变量和实例变量都相当于全局变量

  • 相对来说,在类中的方法里,才有局部变量,初始化的时候不是定义 实例.实例变量 ,而是直接定义 变量 

 一下子说的这么复杂难以理解,举个栗子?就明白了:

class Doctor:
    salary = 100

    def talk(self):
    ¦   print('I am a doctor')


print(salary)

# salary是Doctor的类变量,在类中定义
# 但在主程序中并不能被正确访问
# 因为salary变量是局部变量


# 运行结果:
Traceback (most recent call last):
  File "8.py", line 8, in <module>
    print(salary)
NameError: name 'salary' is not defined

# 抛出变量未定义异常
class Doctor:
    def talk(self):
        self.salary = 100


print(salary)

# 同样,实例变量self.salary也是局部变量


# 运行结果:
Traceback (most recent call last):
  File "9.py", line 6, in <module>
    print(salary)
NameError: name 'salary' is not defined

# 抛出变量未定义异常
class Doctor:
    def talk(self):
        self.salary = 100


Doctor().talk()
print(salary)

# 即使执行了talk方法,也不能正确访问
# 因为它至始至终都是局部变量

# 运行结果:
Traceback (most recent call last):
  File "9.py", line 12, in <module>
    print(salary)
NameError: name 'salary' is not defined
class Doctor:
    salary = 100
    print(salary)

    def talk(self):
        print(Doctor.salary)

    def eat(self):
        print(Doctor.salary)


lisi = Doctor()
lisi.talk()
lisi.eat()

# 因为类变量在整个类中都是共有的
# 因此类变量能被类中的方法访问
# 换句话说,在类中类变量相当于全局变量

# 运行结果:

  100
  100
  100

class Doctor:
    salary = 100
    print(salary)

    def talk(self):
        self.food = 'BaoZi'
        print(Doctor.salary)
        print(self.food)

    def eat(self):
        print(Doctor.salary)
        print(self.food)


lisi = Doctor()
lisi.talk()
lisi.eat()

# 在talk方法里面定义实例变量self.food
# 但是在eat方法里面却可以访问self.food这个实例变量
#(前提是必须先运行talk方法,就相当于初始化self.food)
# 因此,在实例中,类变量和实例变量都相当于全局变量


# 运行结果:

  100
  100
  BaoZi
  100
  BaoZi

 

class Doctor:

    def talk(self):
        salary = 100
        print(salary)

    def eat(self):
        print(salary)


lisi = Doctor()
lisi.talk()
lisi.eat()

# 在类中talk方法里定义局部变量salary
# 在其他方法中是不能被访问的


# 运行结果:
100
Traceback (most recent call last):
  File "12.py", line 13, in <module>
    lisi.eat()
  File "12.py", line 8, in eat
    print(salary)
NameError: name 'salary' is not defined

1.4 类变量和实例变量注意事项

「类变量在类中函数体内有两种访问方式: 类.类变量 和 实例.类变量 ,这两种方式会带来不同的后果。使用 实例.类变量 访问类变量后,其实是重新创建了一个新的实例变量: 实例.实例变量 ,与类变量已经无关了」

class Doctor:
    salary = 100  # 初始化类变量salary

    def talk0(self):
        print('talk0:', Doctor.salary)
        Doctor.salary = 200   # 修改类变量salary的值为200

    def talk1(self):
        print('talk1:', Doctor.salary)
        print('talk1:', self.salary)
        self.salary = 300   # 修改self.salary的值为300

    def talk2(self):
        print('talk2:', self.salary)
        print('talk2:', Doctor.salary)  # 输出的类变量并没有被改变为300


lisi = Doctor()

lisi.talk0()
lisi.talk1()
lisi.talk2()


# 运行结果:
talk0: 100
talk1: 200
talk1: 200
talk2: 300
talk2: 200

强烈建议:类变量的访问方法用 类.类变量 

小结

本小节介绍了Python中类的各种变量知识,在实际使用中要有深刻的理解才行。之后会记录类的传参、类的性质、类的属性方法等,拜拜~~

--结束END--

本文标题: #3 Python面向对象(二)

本文链接: https://www.lsjlt.com/news/181203.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • #3 Python面向对象(二)
    前言 上一节主要记录面向对象编程的思想以及Python类的简单创建,这节继续深入类中变量的相关知识,Here we go! Python中类的各种变量 1.1 类变量 类变量定义:在类中,在函数体(方法)外的变量称为类变量。类变量在整个类...
    99+
    2023-01-30
    面向对象 Python
  • Python面向对象(成员)(二)
    1. 成员     在类中你能写的所有内容都是类的成员 2. 变量     1. 实例变量: 由对象去访问的变量. class Person: def __init__(self, name, id, gender, bi...
    99+
    2023-01-30
    面向对象 成员 Python
  • Python面向对象编程(二)
    目录一、对象的继承1、类的构造函数继承__init__():2、继承关系中,对象查找属性的顺序二、类的派生1、派生方法一(类调用)2、派生方法二(super)三、类的组合四、多父类继...
    99+
    2024-04-02
  • python粗谈面向对象(二)
    浅谈super() super并不是一个函数,是一个类名,形如super(B, self)事实上调用了super类的初始化函数,产生了一个super对象;Python的多继承类是通过mro的方式来保证各个父类的函数被逐一调用,而且保证每个...
    99+
    2023-01-30
    面向对象 python
  • javascript面向对象3
    函数 创建函数: function f(x){…..}; var f = function(x){…}; 上面两种形式都可以创建名为f()的函数,不过后一种形式可以创建匿名函数。        函数定义时可以设置参数。如果传给函数的参数个数...
    99+
    2023-01-31
    面向对象 javascript
  • php面向对象教程3
    5.如何实例化对象我们上面说过面向对象程序的单位就是对象,但对象又是通过类的实例化出来的,既然我们类会声明了,下一步就是实例化对象了。当定义好类后,我们使用new 关键字来生成一个对象。$对象名称= new 类名称();<phpcla...
    99+
    2023-01-31
    面向对象 教程 php
  • Python基础:一起来面向对象 (二)
    实例 搜索引擎   一个搜索引擎由搜索器、索引器、检索器和用户接口四个部分组成   搜索器就是爬虫(scrawler),爬出的内容送给索引器生成索引(Index)存储在内部数据库。用户通过用户接口发出询问(query),询问解析后送达检索...
    99+
    2023-01-31
    面向对象 基础 Python
  • python面向对象
    python面向对象 目录: 1.类的定义和使用 2.类的封装 3.类的继承 4.多态   1.类的定义和使用 查、增加、修改、删除、初始化方法、实例化 __init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这...
    99+
    2023-01-30
    面向对象 python
  • Python 3 学习笔记:面向对象编程
    概述 面向对象编程(Object Oriented Programming,即 OOP),是一种程序设计思想,比面向过程编程更加灵活,更易扩展。 Python 在设计的时候就是按照面向对象编程的思想设计的,像我们前面学过的各种数据类型,如字...
    99+
    2023-01-31
    面向对象 学习笔记 Python
  • python 面向对象、类、对象
    class 类 object 对象 object-oriented programming 面向对象,简称OOP attribute 属性 method 方法 inheritance 继承 python中通过类和对象来实现 ...
    99+
    2023-01-31
    面向对象 对象 python
  • python 面向对象
    面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序...
    99+
    2023-01-30
    面向对象 python
  • Python|面向对象
    #一、类、对象定义及使用 #定义类语法:class 类名(父类):代码块注意:()可有可无 #class Student: #class Student(): #创建对象(实例)语法:对象名=类名() 注意:Java语言在实例化对...
    99+
    2023-01-30
    面向对象 Python
  • python - 面向对象
    #python面向对象 - 类定义   注意:特殊方法"__init__"前后分别有两个下划线!!!   __init__方法可以理解成定义属性的方法,编辑器中会默认将属性都绑定到self中,在使用时直接self.shuxing 即可哟;...
    99+
    2023-01-31
    面向对象 python
  • Scala 学习之面向对象(3)
    ==> 类        ---> 类的定义class Student{     // 定义属性     private var stuName:String = "Tom"     private vat stuAge:Int...
    99+
    2023-01-31
    面向对象 Scala
  • 【Python刷题篇】——Python入门 011面向对象(二)
    🤵‍♂️ 个人主页: @北极的三哈 个人主页 👨‍💻 作者简介:Python领域新星创作者。 📒 系列专栏:《牛客刷题-Pyt...
    99+
    2023-09-05
    python 开发语言
  • Python面向对象之面向对象基本概念
    面向过程和面向对象概念 过程和函数:过程类似于函数,只能执行,但是没有返回结果;函数不仅能执行,还能返回结果。 面向过程和面向对象 基本概念 面向过程-怎么做 把完成某一个需求的所有步骤从头到尾逐步实现; 根据开发需求,将某些功能独立的...
    99+
    2023-01-31
    面向对象 基本概念 Python
  • python面向对象,类
    1:类和对象    是面向对象中的俩个重要概念,类是对事物的抽象,比如人类,球类。对象是事物的实例,比如足球,篮球。球类可以对球的特征和行为进行抽象,然后可以实例化一个真实的球体出来。2:类的定义    类把需要的变量和函数组合成一起,这种...
    99+
    2023-01-31
    面向对象 python
  • [Python3]Python面向对象
    一、面向对象的程序设计的由来 1.第一阶段:面向机器,1940年以前 最早的程序设计都是采用机器语言来编写的,直接使用二进制码来表示机器能够识别和执行的指令和数据。 简单来说,就是直接编写 0 和 1 的序列来代表程序语言。例如:使用 ...
    99+
    2023-01-31
    面向对象 Python
  • python面向对象(一)
    面向对象 1.初始面向对象     面向过程:         一切以事务的发展流程为中心.     面向对象:         一切以对象为中心. 一切皆为对象. 具体的某一个事务就是对象     打比方:   面向过程  ...
    99+
    2023-01-30
    面向对象 python
  • Python面向对象之类和对象
    目录类定义类定义类和属性类中方法对象方法(普通方法)类方法静态方法魔术方法对象创建对象对象属性总结 类 定义类 所有类名首字母要求大写,多个单词时遵循驼峰命名法 所...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作