类属性与实例属性 、 类方法与实例属性感觉在实际代码中没有什么区别

来源:9-11 静态方法

一璐逍遥

2019-02-12

class Chatroom():
    msgList = []

    @classmethod
    def printList(cls):
        for i in cls.msgList:
            print(i)

    def printSelfList(self):
        for i in self.msgList:
            print(i)

    def send(self,msg):
        # Chatroom.msgList.append(msg)
        self.msgList.append(msg)


room1 = Chatroom()
room2 = Chatroom()

room1.send('room1.aaa')
room2.send('room2.bbb')

Chatroom.printList()
print('------------------------------------')
room1.printSelfList()

在方法send()中,如果使用self.msgList.append(msg) ,感觉消息应该添加在实例的列表中,room1和room2的列表应该是各自独立的,代码运行后结果如下

room1.aaa
room2.bbb


room1.aaa
room2.bbb

感觉类定义的属性是各实例公用的,这不符合面向对象语言的习惯

为了对比实验,在方法send()中,如果使用Chatroom.msgList.append(msg) ,代码运行后,结果也是一样的
room1.aaa
room2.bbb


room1.aaa
room2.bbb

请问:
1、python中对象实例的属性是否都指向实例独立的空间,如果是,上例如何解释?
2、类方法与类普通的方法在类和对象都可以用,难度只是要程序员自己识别方法本身是属于类的还是属于实例的来区别使用吗,解释器为什么不能区分,如果这样,类方法有什么意义呢?

写回答

1回答

7七月

2019-02-13

我记得课程中我详细解释了Python查找变量的方式是链式的,实例没有会去类里找,这一点和Java等是不同的,理解查找联调,这些都不是问题。

第二个问题,我不太理解什么是类方法,什么是类普通方法?通常只有静态方法和实例方法呀。

0
0

Python3.8系统入门+进阶 (程序员必备第二语言)

语法精讲/配套练习+思考题/原生爬虫实战

14447 学习 · 4438 问题

查看课程