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

本文详细介绍了Python类的属性访问、修改、增加,以及类方法的使用,包括类属性的共享特性、实例属性的创建和动态添加,以及魔法方法在类中的运用。通过实例演示了如何在类间关系、对象属性操作和内置方法如isinstance、getattr等的应用。

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

在这里插入图片描述

类的属性和方法

类的属性

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

实例属性的修改
其实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
张飞
属性不存在
张飞
关羽
关羽
属性不存在
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值