从Python来重新看待面向对象中的类
学习了C++、C#还有JAVA之后,我对面向对象中的类与对象之间关系的理解是这样:类是模板、蓝图,在创建类对象的时候依据的是类,也就是说,可能具体属性值可能不同,但所有由同一个类创建的类对象都具有相同的属性。
在了解Python之前,我一直都是这种理解。但后来,我想到了一段Python代码,如下:
class my_class():
def __init__(self) -> None:
pass
def fun1(self):
self.aaa = 'aaa'
def fun2(self):
self.bbb = 'bbb'
def fun3(self):
print(self.aaa, self.bbb)
c1 = my_class()
#c1.fun3()
c2 = my_class()
c2.fun1()
#c2.fun3()
c3 = my_class()
c3.fun1()
c3.fun2()
c3.fun3()
直接执行这个程序,输入如下:
aaa bbb
如果把#c2.fun3()注释取消后再执行,则程序出错:
Traceback (most recent call last):
File "e:\Project\Python\Learning\hello_world\demo.py", line 19, in <module>
c2.fun3()
File "e:\Project\Python\Learning\hello_world\demo.py", line 12, in fun3
print(self.aaa, self.bbb)
AttributeError: 'my_class' object has no attribute 'bbb'
如果把#c1.fun3()注释取消后再执行,则程序同样会出错:
Traceback (most recent call last):
File "e:\Project\Python\Learning\hello_world\demo.py", line 15, in <module>
c1.fun3()
File "e:\Project\Python\Learning\hello_world\demo.py", line 12, in fun3
print(self.aaa, self.bbb)
AttributeError: 'my_class' object has no attribute 'aaa'
由此看来,c1没有属性'aaa',c2没有属性'bbb',而c3同时具有属性'aaa'和'bbb'。这样的话,均由类'my_class'创建的三个对象,具有属性却都不一样。这有些颠覆我对类及对象的理解。不知是我之前的理解错了,还是说Python语言改变了类及对象的定义?
相关推荐
Python面向对象中类(class)的简单理解与用法分析
主要介绍了Python面向对象中类(class)的简单理解与用法,结合实例形式分析了Python面向对象程序设计中类(class)的基本概念、原理、定义与使用方法,需要的朋友可以参考下
python面向对象练习题.pdf
python面向对象练习题,资料,教育资料
Python入门——类,面向对象的编程
文章目录引子第一部分 类的定义1.1 类的命名1.2 类的属性——类内部声明的变量1.3 类的方法——类内部定义的函数第二部分 创建实例2.1 实例的创建——实例名 = 类名(初始化参数)2.2 访问属性——实例名.属性名2.3 调用方法——实例名.方法名(参数)2.4 修改属性2.4.1 直接修改2.4.2 通过方法修改属性2.4.3 继续拓展2.5 小结第三部分 类的继承——class 子类名(父类名)引子3.1 简单的继承3.2 给子类添加属性和方法3.3 重写父类的方法(多态)——方法名不变,参数可变第四部分 用在类中的实例 引子 Why:面向对象更符合人类对客观世界的抽象和理解 一切
浅谈python中的面向对象和类的基本语法
下面小编就为大家带来一篇浅谈python中的面向对象和类的基本语法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
python面向对象
python面向对象精彩讲解视频,详细讲解了python在面向对象中的用途。


