python手把手50天就业(九) 类 objects类方法

本文介绍了Python中类的概念,强调类作为数据结构模板的角色,用于创建具有特定属性和方法的对象。内容包括:1.1 创建类、1.2 self的理解、1.3 变量、1.4 方法的定义、1.5 object类的特性和方法,如删除属性、查看属性方法列表、hashcode和eq方法、format方法、获取属性、比较大小、设置属性、打印对象以及生成对象的方法。文章旨在帮助读者深入理解Python面向对象编程的基础知识。
摘要由CSDN通过智能技术生成

工程师们大家好,配套免费视频(平时上班周末录制)


我们虽然做的是计算机软件开发,但是做的系统也不能脱离实际,因为这些系统需要在实际中去运用,才能体现价值,才能挣钱。

超市管理系统,图书管理系统,要是没有这些系统,就需要投入更多的人力,物力去管理,去记录超市商品的价格,图书的分类,以及进销存等等信息,正是因为我们的系统,节约了人力物力,所以才把这份钱投资到了系统上,我们也才有了工资。

那我们就以实际的情况去考虑,比如学生管理系统,学生非常多,有张三,李四,这些人的信息,都是在页面上录入,然后传递到python,python拿到这些信息以后在后台代码中需要传递过去传递过来,为了避免混乱交叉,张三的信息跟李四的信息最好打包独立存放吧?

张三的信息有名字、年龄、性别等等

李四的信息有名字、年龄、性别等等

这些信息在计算机里面统称为数据,也就是我们要存的其实是数据,用什么数据结构去存储呢?

这种数据结构就是类:为了方便存储张三、李四等各种人,类这种数据结构应该要有他们共同的特征,就像印钞一样,为了快速的印出钞票用了一种叫模板的东西,类就是模板,我们提取出张三、李四等学生相似的信息让它成为一个学生模板,后面在输入学生信息的时候,就在这个模板的基础上去创建出一个一个具体学生,这些具体学生在编程语言里,需要依靠类来创建,我们称为对象

1.1创建类

# 定义了一个类 student 是学生的模板
class student:
    def __init__(self, name, age, address):
        # 就近原则  self.name = name  self.name调用的是self地址里面的name  后面的name就是参数的name
        self.name = name  # 这个类student 应该具有所有学生共同的名字
        self.age = age  # 年龄
        self.address = address  # 地址 这些都是不确定的 所以用变量表示
        print(self)  # self 等于调用它的对象的地址值 s1调用self就是s1的地址值 s2调用self就是s2的地址值
# 这些提取出来共同的名字、年龄、地址等 称为这个类的属性


# ------------下面是调用上面的类--------------

# 根据张三的信息 调用模板 创建出了一个对象
# s1 就是student模板的一个对象
# student() 调用的 就是student模板的__init__方法 也称为构造方法
# 每创建一个对象在内存中就会分配一个地址
# 而上面的self 就指向调用它的地址 s1.name 那么self=s1的地址值
s1 = student('张三', 20, '成都')
# 比如s1.name是调用的student类里面 name属性 那么这个时候self就代表s1的地址
print(s1.name)  # s1.name s1调用self self=s1 self.name是等于张三的 所以这里是张三
print(s1)

# 每创建一个对象 就会生成一个新的地址 每个地址里面都有self
s2 = student('李四', 30, '成都')
print(s2.name)  # 这里就是李四

方便理解来个简单内存图(画图画得不好哈哈):

在这里插入图片描述

其实对象跟列表什么的一样,也是一种数据结构,也有自己的地址值,不过装的东西比较多(我们会挨着学习),然后依靠模板类创建

class student:
    def __init__(self, name, age, address):
        print(self)  # <__main__.student object at 0x0000022808182F98> 就把self=s1的地址值
        self.name = name  # 所以self.name='张三' 其实就是改变了地址值里面的name 所以下面能访问到
        self.age = age
        self.address = address


s1 = student('张三', 10, '成都')
print(s1)  # <__main__.student object at 0x0000022808182F98>
print(s1.name)  # 上面改了地址里面的东西 大家都同一个地址 所以可以访问
print(type(s1))  # <class '__main__.student'> 指向内存里面的student类
print(id(s1))  # 2370957750168 类似于地址 就是对象在内存的唯一标识

这样还看不懂的话 请看视频(哈哈)

1.2self理解

通过上面其实应该理解了,self就是个变量名,不过是固定的变量名,当有对象被创建时self就会变为对象的地址值,所以

self.name self.age这些代码其实都是在改变对应地址值里面的内容。

self代表当前对象的地址值

1.3变量

class student:
    # 写在这里的name属于类变量 也就是属于类的 每个对象共享
    name = '张三'
    def __init__(self,age):
        # 写在这里的age属性实例变量 就是每个实例(对象)私有的
        self.age = age # 前面的age是属性 后面的age是参数值

s1 = student(10)
print(s1.name) # 访问的是张三
s2 = student(20)
print(s2.name) # 访问的是张三
# 把name改为李四 因为s1 s2都属于student的实例,会共享name变量,也就是大家访问的是一个 
# 所以改变了s2.name  s1的name也会跟着改
s2.name='李四' 

# 再次访问 
print(s1.name) # 张三 发现没变 前面错了吗?
print(s2.name)# 李四 
# 没有错 因为字符串是不可变类型 
# 假设name属性的地址是0x001
# s1 s2的name都是指向0x001
# 执行s2.name='李四'的时候发现字符串是不可变类型,也就是不会在0x001的基础上
# 去改变 而是从新创建一个字符串对象(字符串也是对象) 地址值0x002 
# 所以s2.name--指向了0x002导致 值变为了李四
# 但是s1.name还是指向0x001所以还是张三
# 当然age是每个对象私有的变量 s2改了不会影响到s1

在看下面的例子:

class student:
    hobbies = ['篮球', '白球', '大球']

    def __init__(self, wifes):
        self.wifes = wifes


# 上面有类变量hobbies属于类每个对象共享
# 有私有变量wifes 属于对象私有 都是数组 都是可变类型

s1 = student(['刘亦菲', 
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

说重点丶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值