文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python类之类的成员

2023-01-31 00:25

关注

对于一个学C++的朋友来说,Python类中,哪些是私有成员,哪些是共有成员,估计一直傻傻分不清。

一、本篇博客要解决的问题:

Python类中,哪些是私有成员?哪些是共有成员?

二、 关于Python的类

要想了解Python的类,就必须认识到,当你在Python中写了一个类的时候,你就已经构建了一个新的类型。

所以,你写的类型其本身有属性和方法,而类型对应的实例,也有自己的属性,不过并没有方法。

也就是说,Python中的类,实际上有两层含义,第一层是类本身,第二层是实例。

类型本身有属性和方法,类的属性可以在所有实例中传递,类的方法用来处理实例的数据。

实例本身只有属性,没有方法,属性就是要被类的方法所处理的数据。

Python通过class语句定义一个类,通过__init__(self, *para)构造一个实例,并通过__del__(self)来解构。class是类,self是实例。

三、解决问题。

了解了上面所说的类和实例之后,你可能就已经明白了。Python中类的属性其实就是共有变量,我们称之为类的变量,类的变量可以在所有实例中间传递。而实例的属性则可以大致看成是私有变量,但其实这并不是严格意义上的私有变量,因为我们依然可以通过instance.property来访问并修改这些属性。综上所述:Python中,类的成员,有两种。

1、类成员。可以通过Class.property来调用,也可以通过instance.property来调用,该属性可以在所有实例中传递

2、实例的成员。只能通过instance.property来调用,该属性不与其他实例共享。

3、注意,类的self相当于C++中的指针,但是也有所不同,因为self只指示该实例的数据,不指示类的属性和方法。所以当你需要在类的方法中调用类的属性或者类的其他方法的时候,你需要用类名或者self来指明。但是用类名和用self来指明时,结果是不一样的。详情请见四中的实例代码。

四、示例代码

# -*- coding: utf-8 -*-
# author: zxr
# time: 2019-04-10
# functionality: test class

class TestClass:
    val = 0
    def __init__(self, v):
        self.val1 = v

    def show(self):
        print ('-'*60)
        print (self.val1)

    def add_using_classname(self):
        self.val1 += TestClass.val
        TestClass.show(self)
    
        # below code is unvalid
        # self.val1 += val
        # show()

    def add_using_self(self):
        self.val1 += self.val
        self.show()

    

if __name__ == '__main__':
    tc = TestClass(1)
    tp = TestClass(10)
    print (TestClass.val)
    print (tc.val)
    print (tc.val1)
    print (TestClass.val)
    print (tp.val)
    print (tp.val1)
    print ('-'*60)
    
    TestClass.val = 2
    print ('-'*60)
    print (TestClass.val)
    print (tc.val)
    print (tc.val1)
    print (TestClass.val)
    print (tp.val)
    print (tp.val1)
    print ('-'*60)

    tp.val1 = 3
    tc.val1 = 4
    tp.val = 30
    tc.val = 40
    print ('-'*60)
    print (TestClass.val)
    print (tp.val)
    print (tc.val)
    print (tp.val1)
    print (tc.val1)
    tc.add_using_classname()
    tp.add_using_classname()
    tc.add_using_self()
    tp.add_using_self()
test class

总结:Python中的类与C++中的类是不一样的。Python中的每实例化一个实例之后,就拷贝了一个该类的副本,对这个实例的任何修改都不会影响到类。同样的,要想修改类中的属性,也只能在类中修改,在实例中的修改影响不了其他实例。

 

阅读原文内容投诉

免责声明:

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

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

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯