类
实例成员:对象的不同信息
实例变量:对象.名称
实例方法:def 方法名(self)
类成员:大家共同信息
类变量:定义在类中,方法外; 变量名 = 数据
类方法:@classmethod
def 方法名(cls)
静态方法:独立的功能
封装:
数据角度:多 —> 一
例如:
老婆:姓名、颜值、钱…
敌人:姓名、攻击力、防御力…
向量:x、y
优势:
复合人类思考方式
将数据与对数据的操作合并在一起
行为角度:隐藏(行为) --> 必要(功能)
私有成员:以双下划线命名
障眼法:看见的是双下划线命名的变量
实际是单下划线 + 类名 + 私有变量名
"""
python 属性全部语法
核心逻辑:拦截
目标:保护数据
10:30
"""
# 1. 读 + 写属性 快捷键:props + 回车
# class Wife:
# def __init__(self, age=0):
# self.age = age
#
# @property
# def age(self):
# return self.__age
#
# @age.setter
# def age(self, value):
# self.__age = value
#
# w01 = Wife(25)
# print(w01.age)
# 2. 读 属性 快捷键:prop + 回车
# class Wife:
# def __init__(self):
# # 数据从何而来,无所谓(可以从参数来、某个方法来、写死).
# self.__age = 25
#
# @property
# def age(self):
# return self.__age
#
# w01 = Wife()
# print(w01.age)
#
# w01.age = 222
# 3. 写 属性 快捷键:prop + 回车
# class Wife:
# def __init__(self, age=0):
# self.age = age
#
# age = property()
# @age.setter# age.setter(..)
# def age(self, value):
# self.__age = value
class Wife:
def __init__(self, age=0):
self.age = age
def age(self, value):
self.__age = value
age = property(None,age)
# w01 = Wife(25)
# print(w01.__dict__)
# print(w01.age)
""
封装设计思想
分而治之:划分为多个类
变则疏之:识别变化点(行为)
-------------
高内聚:类有且只要一个变化点(原因)
低耦合:类与类的关系松散
"""
# 类与类行为不同
# 对象与对象数据不同
# 需求:老张开车去东北
# 变化:老张、老李、老王... --> 数据不同
# 划船、骑车、飞机... --> 行为不同
# 西北、南北... --> 数据不同
# 写法1
# 语义:老张去东北创建一辆新车
# 老张无论去哪里,都会创建一辆新车
# class Person:
# def __init__(self, name=""):
# self.name = name
#
# def go_to(self,position):
# print(self.name,"去",position)
# car = Car()
# car.run()
#
# class Car:
# # 实例成员:对象.?
# def run(self):
# print("汽车行驶")
#
# lz = Person("老张")
# lz.go_to("东北")# 一辆新车
# lz.go_to("家")# 又一辆新车
# 写法2
# 语义:老张开车自己的车去东北
# class Person:
# def __init__(self, name=""):
# self.name = name
# self.car = Car()
#
# def go_to(self,position):
# print(self.name,"去",position)
# self.car.run()
#
"""
需求:小明在银行取钱
现象:人的钱多了 银行的钱少了
"""
class Person:
def __init__(self,money):
self.money = money
class Bank:
def __init__(self,money):
self.money = money
def draw_money(self,person,value):
self.money -= value# 银行钱少了
person.money += value# 人钱多了
xm = Person(0)
zsyh = Bank(100000)
zsyh.draw_money(xm,5000)
print("小明的钱:",xm.money)
print("银行的钱:",zsyh.money)
"""
需求:玩家(攻击力)攻击敌人(血量),
敌人受伤(减血)后可能死亡(播放死亡动画).
"""
class Player:
def __init__(self, atk=0):
self.atk = atk
def attack(self,enemy):
print("玩家打敌人")
enemy.damage( self.atk )
class Enemy:
def __init__(self, hp=0):
self.hp = hp
def damage(self,atk):
self.hp -= atk
print("额~受伤啦")
if self.hp <= 0:
self.__death()
def __death(self):
print("播放死亡动画")
p01 = Player(50)
e01 = Enemy(100)
p01.attack(e01)
p01.attack(e01)
"""
张无忌教赵敏九阳神功
赵敏教张无忌化妆
张无忌上班挣了8000
赵敏上班挣了10000元
"""
class Person:
def __init__(self, name=""):
self.name = name
def teach(self,person_other,skill):
print(self.name,"教",person_other.name,skill)
def work(self,salary):
print(self.name,"上班挣了",salary,"元")
zwj = Person("张无忌")
zm = Person("赵敏")
zwj.teach(zm,"九阳神功")
zm.teach(zwj,"化妆")
zwj.work(8000)
zm.work(10000)