python基础之类的属性&方法、魔术方法&普通方法

类的定义、调用方法、引用属性

在这里插入图片描述

类的属性和方法

类的属性

类属性的访问
类属性可以直接访问,无需实例化
类属性也可以通过实例来访问
实际上,所有的实例是共享类属性的
在这里插入图片描述
类属性的修改
修改了类属性后,对应的类属性和实例属性都会被修改
类属性的修改,会影响类和所有实例化出来的实例
在这里插入图片描述
类属性的增加
增加了一个类属性后,实例的属性也对应增加
在这里插入图片描述

实例属性的修改
其实art_wang.salary = 6000这句并不是修改了类属性,而是增加了一个实例属性,只不过巧合的是这个实例属性和原来的类属性重名了
在这里插入图片描述
我在art_wang里新增一个salary_wang的属性,可以看到原来的salary还是存在的,值也是没有变,只是新增的salary_wang属性的值为6000,而其他实例化(art_li)的salary值依旧是5000
在这里插入图片描述
其实增加了一个同名的属性,对原来的属性并不影响,原来的属性也还在,只是优先访问的是新增加的实例属性,原来同名的类属性就被屏蔽掉了(类似局部变量的优先级)

修改实例属性和新增实例属性在语法上是一样的
修改实例属性对其他实例的同名属性不会产生影响

创建实例属性
通过init初始化方法创建实例属性
实例化的时候直接传值
在这里插入图片描述
动态增加实例属性
给art_wang增加一个w_salary属性,这个就是只有art_wang才有,art_li就没有这个属性
在这里插入图片描述
总结
类的属性,可增加可修改,不管增加还是修改都会影响到所有的实例;
增加实例的属性,不会影响其他实例的同名属性,因为那是共享的类属性;
实例属性是通过init初始化方法来创建的

类的方法

类方法未实例化之前不能调用
类方法可以有返回值
在这里插入图片描述
类方法的重写
在这里插入图片描述
简单应用
在实际应用中,往往会把很多类单独放到一个模块中
新建一个用户类
在这里插入图片描述
用的时候可以直接导入
在这里插入图片描述

魔法方法(魔术方法)

魔法方法都是类的方法
Python 的类中,所有双下划线包起来的方法,就叫魔法方法
在类和对象发生某些事件的时候,可以自动运行,让类具有了神奇的魔力

init方法
初始化方法,在实例化时自动运行
该方法定义的属性,即为实例属性.
自动开辟了一个内存空间,保存该实例对象的属性 和 类方法的指针.
在这里插入图片描述
在这里插入图片描述
两个类之间关系的方法

class A():
    pass


class B(A):
    pass


class C():
    pass


b = B()

# 判断 实例,是否为 类 创建出来的
print(isinstance(b, A))
print(isinstance(b, B))
print(isinstance(b, C))

# 判断子类
print(issubclass(B, A))
print(issubclass(A, B))
# 结果
True
True
False
True
False

str方法
在这里插入图片描述
在这里插入图片描述
doc方法
在这里插入图片描述
在这里插入图片描述
module
当前对象所在的模块
在这里插入图片描述
class
查看当前对象的类
在这里插入图片描述
name
查看当前模块是否是main
在这里插入图片描述
del
当对象被删除时自动运行,一般做收尾工作

在这里插入图片描述
dict
把实例属性以字典的形式输出
在这里插入图片描述
反射

# hasattr 是否有...
print(hasattr(user_1, "user_name"))
print(hasattr(user_1, "user_code"))
print(hasattr(user_1, "login"))
print(hasattr(user_1, "login_out"))

# getattr 获取
print(getattr(user_1, "user_name"))
print(getattr(user_1, "user_code", "属性不存在"))

# set  修改对象属性
print(getattr(user_1, "user_name"))
setattr(user_1, "user_name", "关羽")
print(getattr(user_1, "user_name"))

# delattr 删除属性
print(getattr(user_1, "user_name", "属性不存在"))
delattr(user_1, "user_name")
print(getattr(user_1, "user_name", "属性不存在"))
True
False
True
False
张飞
属性不存在
张飞
关羽
关羽
属性不存在

版权声明:本文为aijaijgnaw原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。