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

目录

1. 基本概念

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

3. 命名冲突

4. 类对象的删除


1. 基本概念

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

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

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

类和对象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 "", line 1, in 
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 "", line 1, in 
NameError: name 'Test' is not defined

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

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

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

test1.testinfo
'Hello, everyone!'

test1.showinfo()
Hello, everyone!

你可能感兴趣的:(Python学习,#,类和对象,python,开发语言)