【Python】第十部分 类与对象

【Python】第十部分 类与对象



10. 类与对象

10.1 什么是类?

  类就是对一群具有相同特征行为的事物一个统称,是抽象的,不能直接被使用

特征 --> 属性

行为 --> 方法

  类其实就是一个模板,或者说是一个图纸,用来创建很多对象,对象就是由图纸所创造出来的,所以具备类中的属性和方法


10.2 创建类

语法:

class 类名:
	pass
# 创建一个简单的类(只包含方法)
class Student:
    def run(self):
        print('学生们在跑步!')

    def swimming(self):
        print('学生们在游泳!')


# 创建实例对象
s = Student()

# 调用Student中的方法
s.run()  # 学生们在跑步!
s.swimming()  # 学生们在游泳!

# 我们输出一下看看对象和类
# 对象中的十六进制其实存储的就是它的id
print(s, id(s))  # <__main__.Student object at 0x0000028CF8B51A58> 2804491295320

print(Student, id(Student))  # <class '__main__.Student'> 2456759623672

10.3 方法中self参数

self:由哪一个对象调用的方法,方法内self就是哪一个对象的引用

# 个人理解很像this
# 我们在调用方法的时候不需要传递self参数,在方法的内部可以使用self去访问方法和属性
'''
    下面的案例使用给对象设置属性,非常简单,但是不推荐使用,因为对象属性应该封装在类的内部
    这里为了讲解使用,给对象添加属性,  对象.属性名 = 属性值
'''


class Cat:
    def eat(self):
        print(f'{self.name}吃鱼')

    def run(self):
        print(f'{self.name}快跑')


c = Cat()
c.name = '小黄'
c.run()  # 小黄快跑
c.eat()  # 小黄吃鱼

'''
    上述代码的隐患,如果在添加name属性之前调用run和eat方法就会报错
    因为找不到name这个属性,所以这种添加属性的方法简单但是不推荐使用
'''

10.4 常用的内置方法

方法名类型作用
new方法创建对象的时候,会被自动调用
init方法对象初始化的时候,会被自动调用
del方法对象从内存中被销毁的时候,会自动被调用
str方法返回对象描述信息的时候,print函数输出使用
"""
	初始化方法 (__init__)专门用来去定义一个类中具体有哪些方法
	当对象初始化的时候会被自动调用(即当使用类名()创建对象时)
"""

""" 
    在__init__方法的内部 self.属性名 = 属性值 就可以定义属性,
    定义属性后,在创建该类的对象就都会拥有该属性
"""

""" 
    __del__方法,当一个对象在内存中被销毁前,会自动调用该方法
    使用的场景:如果希望对象在被销毁前,处理一些事情就可以在该方法中操作
"""

"""
    __str__方法,如果在开发的过程中,希望print函数输出类对象这个变量,同时能够打印我们自定义的内容,就可以使用__str__,需要注意:该方法必须要返回一个字符串
"""

"""__new__和__init__下面的部分会单独去讲"""


class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def hello(self):
        print(f'大家好!我叫{self.name},今年{self.age}')

    def __del__(self):
        print('我被销毁了')

    def __str__(self):
        return f'我是__str__方法,调用我的是{self.name}'


d = Dog('小七', 18)
d.hello()
# 如果不使用__str__,默认会输出为<class '__main__.Dog'> 2456759625572
print(d)  # 我是__str__方法,调用我的是小七


10.5 基本术语

""" 
基本术语
		类本身也是一个对象,下面介绍的时候就表述为类对象
		创建出来的对象叫做类的实例
		创建这个动作叫做实例化
		对象的属性就叫做实例属性
		对象调用的方法就叫做实例方法
"""
class Food:
    def __init__(self, name):
        # 实例属性
        self.name = name

    def introduce(self):
        print('我是实例方法')

10.6 类属性、类方法、静态方法

10.6.1 类属性

# 类属性就是给类对象中定义的属性
# 通常用来记录这个类的相关特征
# 类属性不会去用于记录具体对象的特征
class Person:
    # 在这里定义一个类属性用来去记录创建对象的次数
    count = 0

    def __init__(self, name):
        self.name = name
        # 类属性加1
        Person.count += 1


p1 = Person('人员一')
p2 = Person('人员二')
p3 = Person('人员三')

# 使用类名.类属性进行访问
print(Person.count)  # 3
# 访问类属性还可以使用对象.类属性(不推荐)
'''
    原理是当你去访问的时候,他会在先在该对象中去查找,
    如果有则输出,没有则向上查找创建他的类是否有该属性
'''
print(p1.count)  # 3
print(p2.count)  # 3
print(p3.count)  # 3

# 用对象去访问类属性会产生问题例如下面的例子
p1.count = 99
print(p1.count)  # 99
print(Person.count)  # 3
'''
    对p1.count进行修改为99,实际上它是去p1中去找是否有count这个
    属性如果没有则创建count属性并且赋值为99,而不是向上去查找
'''

10.6.2 类方法

# 类方法顾名思义就是针对类定义的方法,类方法在内部可以直接访问类方法和类属性
class Teacher:
    count = 0
    def __init__(self, name):
        self.name = name

    @classmethod
    def clsMethod(cls):
        cls.count += 1
        print(cls.count)

Teacher('Jack').clsMethod()  # 1

10.6.3 静态方法

# 静态方法就是该方法不需要访问类属性,类方法,实例属性,实例方法
# 例如:我们玩游戏的时候有个帮助说明,它只需要输出文本
class Game:
    def __init__(self,name):
        self.name = name

    @staticmethod
    def help():
        print('我是静态方法,帮助说明!')

Game.help()  # 我是静态方法,帮助说明!

"""
    总结:
    - 在方法的内部,即需要访问实例属性,又要访问类属性,则使用实例方法
      因为类只有一个,实例方法内部可以使用类名.类属性进行访问
    - 在方法的内部,不需要访问类属性,类方法,实例属性,实例方法,则使用静态方法
    - 在方法的内部,只需要访问类属性的,则使用类方法
"""

总结

以上就是今天要讲的内容,希望对大家有所帮助!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值