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)的方法。它们与类和实例无关,更像是独立于类的普通函数,只是为了代码组织而放在类中
- 优点:代码组织:将相关功能组织在一起、无需实例化:直接通过类名调用,节省内存、可读性:明确表明该方法不依赖实例状态、可测试性:更容易进行单元测试
- 缺点:不能直接访问实例变量或类变量

浙公网安备 33010602011771号