类和对象4:类、类对象、实例对象

目录

1. 基本概念

2. 实例对象的属性/方法

3. 命名冲突

4. 类对象的删除


1. 基本概念

通过代码描述类的属性、方法等内容,实现类的定义;

类定义后即创建类对象,包括定义的类的各种属性和方法;

基于类创建各个实例对象,实例对象继承类的所有属性和方法;

2. 实例对象的属性/方法

实例对象,如尚未修改继承至类的属性或方法,实例对象调用的属性和方法即类对象的属性和方法;

实例对象,如对类的属性或方法做了赋值、重构,即使内容/代码完全一致,也重新创建了独属于该实例对象的属性或方法;

#类定义,创建类对象
class Test:
     testNo = 0
    
#创建三个类的实例对象 
test1 = Test()
test2 = Test()
test3 = Test()

#实例对象test1,赋值属性testNo
test1.testNo = 10

#除实例对象test1外,类对象和其他实例对象,该属性值不变
print(Test.testNo, test1.testNo, test2.testNo, test3.testNo)
0 10 0 0

#类对象Test,赋值属性testNo
Test.testNo = 5

#除除实例对象test1外,可见其他实例对象的属性testNo,即类对象的属性testNo,跟随改变
print(Test.testNo, test1.testNo, test2.testNo, test3.testNo)
5 10 5 5

#再对实例对象test2做上述操作,结果一致
test2.testNo = 15
Test.testNo = 20
print(Test.testNo, test1.testNo, test2.testNo, test3.testNo)
20 10 15 20

3. 命名冲突

如果属性名和方法名一致,则属性会覆盖方法;

为避免命名冲突,编写代码时需要注意尽量利用继承/组合来复用已有属性、方法,使用更规范、可读性较好的命名规则。

#创建类
class Test:
     testNo = 0
     def testFun(self):
         print('hi!')
     
#创建实例对象 
test1 = Test()
test2 = Test()

#赋值与方法同名属性
test1.testFun = 1

#调用方法失败,属性已覆盖方法
test1.testFun()
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: 'int' object is not callable
test1.testFun
1

#其他实例对象仍能正常调用方法
test2.testFun()
hi!

4. 类对象的删除

删除类对象后,实例对象仍可正常调用所有的方法和属性。

#创建类
class Test:
     testinfo = 'Hello, everyone!'
     
     def __init__(self,name):
         self.name = name
         
     def showinfo(self):
         print(self.testinfo)
     
#创建类的实例对象
test1 = Test('test1')

#删除类
del Test

#类对象的属性、函数无法使用,也无法在创建该类的实例对象
Test.testinfo
Traceback (most recent call last):
  File "<input>", line 1, in <module>
NameError: name 'Test' is not defined

Test.showinfo(Test('testx'))
Traceback (most recent call last):
  File "<input>", line 1, in <module>
NameError: name 'Test' is not defined

test2 = Test('test2')
Traceback (most recent call last):
  File "<input>", line 1, in <module>
NameError: name 'Test' is not defined

#已创建的实例的属性和方法,仍可以正常使用
test1.name
'test1'

test1.testinfo
'Hello, everyone!'

test1.showinfo()
Hello, everyone!

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

燃烧的火鸟啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值