对象:
类:
举例:
ShoppingCar
、Student
)# 定义类,类名采用驼峰体命名,例如(ShoppingCar、Student)
# 定义植物类
class Plant:
# 定义变量的共同属性,没有特殊的要求
# 定义植物的主人是戴夫
plant_owner = "戴夫"
# 功能方法的定义,通常要有一个self(self是实例对象)
# 定义初始化方法
def set_info(self, name, health):
self["name"] = name
self["health"] = health
# 定义打招呼方法
def introduce(self):
print(f"""
我是{self['name']}
我的生命值为{self['health']},
我的主人是{self['plant_owner']}
""")
class A:
print("定义时")
# 输出
# 定义时
__dict__
内置方法,返回一个字典包含类的所有类成员print(Plant.__dict__)
# {'__module__': '__main__', 'plant_owner': '戴夫', 'set_info': <function Plant.set_info at 0x00000277B4103910>, 'introduce': <function Plant.introduce at 0x00000277B43E9CF0>, '__dict__': <attribute '__dict__' of 'Plant' objects>, '__weakref__': <attribute '__weakref__' of 'Plant' objects>, '__doc__': None}
print(Plant.__dict__["plant_owner"])
# 戴夫
print(Plant.__dict__["set_info"])
# <function Plant.set_info at 0x00000277B4103910>
print(Plant.__dict__["introduce"])
# <function Plant.introduce at 0x00000277B43E9CF0>
# 类名.属性
print(Plant.plant_owner)
# 戴夫
# 类名.方法
print(Plant.set_info)
# <function Plant.set_info at 0x00000277B4103910>
print(Plant.introduce)
# # <function Plant.introduce at 0x00000277B43E9CF0>
Plant.enemy = "僵尸"
print(Plant.__dict__)
# 添加了一个键值对('enemy': '僵尸')
print(Plant.enemy)
# 僵尸
def add_func(self):
print("我是随便添加的方法")
Plant.add_func = add_func
print(Plant.add_func)
# <function add_func at 0x0000022592C73E20>
Plant.add_func(Plant)
# 我是随便添加的方法
__dict__
只能访问实例属性,类属性无法访问实例.属性
可以访问所有属性和方法**# 实例化一个向日葵植物
sunflower = Plant()
# 查看实例化对象的实例属性,应该为空
print(sunflower.__dict__)
# {} # 确实为空
# 可以添加实例属性
sunflower.__dict__["func"] = "生产阳光"
# 再次查看实例属性
print(sunflower.__dict__)
# {'func': '生产阳光'} # 添加成功
# 使用.方法,查看类属性
print(sunflower.plant_owner)
# 戴夫
__init__
(魔法方法)# 定义植物类
class Plant:
# 定义植物的主人是戴夫
plant_owner = "戴夫"
# 定义初始化方法
def __init__(self, name, health, attack_value):
self.name = name
self.health = health
self.attack_value = attack_value
# 实例化对象, self不用传参
sunflower = Plant(name="向日葵", health=100, attack_value=0)
pee_shooter = Plant(name="豌豆射手", health=80, attack_value=10)
# # 实例化对象等效方法
# Plant.__init__(self=sunflower, name="向日葵", health=100, attack_value=0)
# Plant.__init__(self=pee_shooter, name="豌豆射手", health=80, attack_value=10)
# 查看实例对象实例属性
print(sunflower.__dict__)
# {'name': '向日葵', 'health': 100, 'attack_value': 0}
print(pee_shooter.__dict__)
# {'name': '豌豆射手', 'health': 80, 'attack_value': 10}
__init__
,将空对象以及调用类时括号内的参数一同传递给__init__
方法__init__
方法必须返回None
,默认不写return
__dict__
可以查找到对象的实例属性.
方法可以查找到所有属性class Plant:
plant_owner = "戴夫"
def __init__(self, name, health, attack_value):
self.name = name
self.health = health
self.attack_value = attack_value
sunflower = Plant(name="向日葵", health=100, attack_value=0)
pee_shooter = Plant(name="豌豆射手", health=80, attack_value=10)
# 查看类属性plant_owner
print(id(Plant.plant_owner))
print(id(sunflower.plant_owner))
print(id(pee_shooter.plant_owner))
# 2317596043440 # 输出地址都相同,那么就是同一个东西
# 2317596043440
# 2317596043440
# 给对象sunflower添加同名的实例属性
sunflower.plant_owner = "僵尸王"
print(id(Plant.plant_owner))
print(id(sunflower.plant_owner))
print(id(pee_shooter.plant_owner))
# 2317596043440
# 2852031322448 # 添加的同名属性地址和其他的不同
# 2317596043440