#3 Python面向对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#3 Python面向对象相关的知识,希望对你有一定的参考价值。

前言

上一节主要记录面向对象编程的思想以及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基础教程中讲解了全局变量与局部变量的相关知识,本节提到的两个变量与它们有什么异同呢?

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

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

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

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

 一下子说的这么复杂难以理解,举个栗子

以上是关于#3 Python面向对象的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段9——JS中的面向对象编程

Python面向对象学习之八,装饰器

python-前方高能-面向对象-进阶3

Python基础 面向对象

Python之初始面向对象(3--5)

Python之面向对象:面向对象基础