python笔记-类和实例

1、类的基本概念

  • class:表明这是一个类
  • ClassName:类的名字
  • ():父类集合的开始和结束
  • object:父类的名字,定义类继承自父类,可以不写,默认是object,object是所有类的直接或间接父类
  • 类的实例化(创建对象)
    -实例名 = 类()的方式实例化对象,为类创建一个实例
点击查看代码
class Player(object):  #object是python的基类
    pass

tom = Player()  #类的实例化(创建一个对象)
print(f"tom的类型是:{type(tom)}")
print(f"tom是Player类吗:{isinstance(tom, Player)}")
print(f"tom是object类吗:{isinstance(tom, object)}")

2、实例的属性(类似于变量)

  • 属于特定对象实例的属性,比如人:姓名、性别、年龄、籍贯、所在城市、工作岗位等就是人的属性;
  • def init(self): #初始化函数,self代表实例化的对象
  • 在实例化对象时会默认自动执行类中的初始化函数
  • 每个实例都有自己独立的副本
  • 典型用途:对象个性化数据
点击查看代码
class Player(object):
    def __init__(self,name,age,city):   #初始化函数(构造函数)
        print(f"打印初始化函数!!!")
        self.name = name
        self.age = age
        self.city = city
#类的实例化类(创建对象)
jake = Player('jake',24,'西安')
jake.city = '北京'  #对象属性重新赋值
print(f"对象jake的基本信息:{jake.name},{jake.age},{jake.city}")
tom = Player('tom',38,'重庆')
print(f"对象tom的基本信息:{tom.name},{tom.age},{tom.city}")
tom.height = 180   #对象在初始化函数外增加属性并赋值
tom.city = '成都'
print(f"tom的所有属性:{tom.__dict__}")   #获取实例对象的所有属性

3、类的属性(类似与全局变量)

  • 属于类本身的属性,所有实例对象共享同一属性,称为类属性
  • 在类定义中直接定义,不在任何方法内
  • 典型应用:常量、计数器、共享配置
点击查看代码
class Player(object):
    number = 0    #类属性
    def __init__(self,name,age,city):   #初始化函数
        print(f"初始化函数!!!")
        self.name = name    #实例属性
        self.age = age
        self.city = city
        Player.number += 1
jack = Player('jack',26,'杭州')
print(jack.__dict__)
print(f"欢迎王者荣耀第{Player.number}个用户注册成功!")
tom = Player('tom',28,'绵阳')
print(f"欢迎王者荣耀第{Player.number}个用户注册成功!")

4、实例方法(类似于函数)

  • 定义在类中,第一个参数为 self 的方法,用于操作实例的属性和状态。self 代表类的当前实例。
  • 调用方法:必须通过类的实例来调用 实例名.实例方法名()
  • 访问权限:可以自由访问和修改实例属性
  • 作用:实现对象的行为和操作
  • 设计原则:
    保持方法单一职责
    使用描述性方法名
    考虑使用属性装饰器替代简单getter/setter
    区分公共方法和私有方法(使用 _ 前缀)
点击查看代码
class Player(object):
    number = 0    #类属性
    levels = ['废铁', '青铜', '白银', '黄金', '钻石', '王者']
    def __init__(self,name,age,city,level):   #初始化函数
        self.name = name    #实例属性
        self.age = age
        self.city = city
        if level not in Player.levels:
            raise Exception(f"你的等级不在等级范围中,请重新设置")
        else:
            self.level = level
        Player.number += 1
    # 定义一个实例方法(与定义函数类似)
    def show(self):
        print(f"我是LOL的第{Player.number}个玩家.\n我的名字是{self.name}.我来自{self.city}.\n我的等级是{self.level}")
    #定义一个升级实例方法
    def level_up(self):
        index_1 = Player.levels.index(self.level)
        if index_1 < len(Player.levels)-1:
            self.level = Player.levels[index_1 + 1]
    #获取一个武器的实例方法
    def get_weapon(self,weapon):
        self.weapon = weapon
    #查看武器的实例方法,调用weapon类中的实力方法
    def show_weapon(self):
        return self.weapon.show_weapon()

#武器:名字、攻击值、等级
class weapon(object):
    number = 0
    max_damage = 10000
    levels = ['废铁','青铜','白银','黄金','钻石','王者']
    def __init__(self,name,damage,level):
        self.name = name
        self.damage = damage
        self.level = level
        weapon.number += 1
        if damage > weapon.max_damage:
            raise Exception(f'最大伤害值是10000,请重试!')
        if level not in weapon.levels:
            raise Exception(f"武器等级不在等级范围列表中,请重新设置")

    #打印武器信息的实例方法
    def show_weapon(self):
        for k,v in self.__dict__.items():
            if k =='name':
                print(f"武器的名称是:{v}")
            elif k == 'damage':
                print(f"武器的伤害值是:{v}")
            else:
                print(f"武器的等级是:{v}")
try:
    #实例化武器对象
    gun = weapon('步枪',100000,'废铁')
    print(f"gun的所有属性:{gun.__dict__}")
    print(f"欢迎王者荣耀第{weapon.number}个武器设置成功!")
    arrow = weapon('弓箭',800,'王者')
    print(f"arrow的所有属性:{arrow.__dict__}")
    print(f"欢迎王者荣耀第{weapon.number}个武器设置成功!")
except Exception as e:
    print(e)

jack = Player('jack',28,'重庆','青铜')
jack.show()
jack.level_up()
jack.show()
jack.level_up()
jack.show()
jack.level_up()
jack.show()
jack.level_up()
jack.show()
jack.level_up()
jack.show()
gun = weapon('步枪',2000,'废铁')
jack.get_weapon(gun)
jack.show_weapon()

5、类方法

  • 类方法是绑定到类本身而不是实例的方法,使用 @classmethod 装饰器定义,第一个参数为 cls(代表类本身)。
  • 类方法示例
点击查看代码
class Player(object):
    number = 0    #类属性
    levels = ['废铁', '青铜', '白银', '黄金', '钻石', '王者']
    def __init__(self,name,age,city,level):   #初始化函数
        self.name = name    #实例属性
        self.age = age
        self.city = city
        if level not in Player.levels:
            raise Exception(f"你的等级不在等级范围中,请重新设置")
        else:
            self.level = level
        Player.number += 1
    # 定义一个实例方法(与定义函数类似)
    def show(self):
        print(f"我是LOL的第{Player.number}个玩家.我的名字是{self.name}.我来自{self.city}.我的等级是{self.level}")
    #定义一个升级方法
    def level_up(self):
        index_1 = Player.levels.index(self.level)
        if index_1 < len(Player.levels)-1:
            self.level = Player.levels[index_1 + 1]
    #获取一个武器的方法
    def get_weapon(self,weapon):
        self.weapon = weapon
    def show_weapon(self):
        return self.weapon.show_weapon()
    #类方法,以@classmethod装饰器标识,默认参数为cls,代表类本身
    @classmethod
    def get_players(cls):
        print(f"LOL游戏注册人数达到{cls.number}人")
miy = Player('miy',18,'成都','黄金')
miy.show()
Player.get_players()

6、变量作用域记忆口诀:
全局变量国家管,整个程序都能看
类属性是家族传,所有成员一起担
实例属性个人有,别人不能动我物
实例方法个人能,操作自己最方便
类方法办家族事,修改传统立规矩
静态方法工具类,不碰状态最独立

点击查看代码
class MyClass:
    class_attr = "类属性"
    
    def __init__(self, value):
        self.instance_attr = value  # 实例属性
    
    # 实例方法 - 可以访问实例属性和类属性
    def instance_method(self):
        return f"实例属性: {self.instance_attr}, 类属性: {self.class_attr}"
    
    # 类方法 - 可以访问类属性,不能访问实例属性
    @classmethod
    def class_method(cls):
        return f"类属性: {cls.class_attr}"
    
    # 静态方法 - 不能访问实例属性或类属性
    @staticmethod
    def static_method():
        return "我是静态方法,不访问类或实例属性"

7、静态方法

  • 类中不需要访问实例属性(self)或类属性(cls)的方法。它们与类和实例无关,更像是独立于类的普通函数,只是为了代码组织而放在类中
  • 优点:代码组织:将相关功能组织在一起、无需实例化:直接通过类名调用,节省内存、可读性:明确表明该方法不依赖实例状态、可测试性:更容易进行单元测试
  • 缺点:不能直接访问实例变量或类变量
posted @ 2026-01-05 17:50  jake瑞  阅读(2)  评论(0)    收藏  举报