PythonStudy——面向对象
# class Person:
# color = "black"
#
# def eat(self):
# print("黑人哥们正在吃饭....")
# 创建对象 也称之为实例化 产生的对象也称之为实例
# p1 = Person()
# print(p1)
# print(p1.color)
# print(p1.__dict__)
#
# p2 = Person()
# print(p2)
# print(p2.color)
# print(p2.__dict__)
#
#
# print(id(p1.color))
# print(id(p2.color))
# print(id(Person.color))
# 当修改某一个对象的属性时 不会影响其他对象和类
# p2.color = "yellow"
# print(p2.color)
# print(p1.color)
# print(Person.color)
#
# Person.color = "red"
# print(p1.color)
# print(p2.color)
# 类中应该仅存储 所有对象都相同的内容
# 如果每个对象的属性都不同则应该放到对象自己的名称空间中
# 如一个班级中所有学员的老师都相同
class Student:
school = "oldboy"
def study(self):
print("正在学习......")
# stu1 = Student()
# stu1.name = "张无忌"
# stu1.age = 17
# stu2 = Student()
# stu2.name = "张翠山"
# stu2.age = 37
# 封装一个方法来初始化对象的属性
# def my_init(stu,name,age):
# stu.name = name
# stu.age = age
#
# stu1 = Student()
# stu2 = Student()
#
# my_init(stu1,"张无忌",17)
# my_init(stu2,"张翠山",37)
#
# print(stu1.name)
# print(stu2.name)
# __init__方法的使用
class Dog:
# 执行时机:当实例化产生对象时会自动执行该函数
# 会自动传入需要初始化的对象
# 初始化必须包含至少一个参数 用于表示对象本身
# 该函数不允许有返回值
def __init__(self,age,name,**kwargs):
# print("init run")
# print(self)
self.age = age
self.name = name
# d = Dog() # === Dog.__init__(d)
# # print(Dog.__init__)
# # print(d)
# # print(d.age)
#
#
# Dog()
d1 = Dog(1,"大花")
d2 = Dog(2,"校花")
print(d1.name)
print(d2.name)
#
# class Person:
#
# def __init__(self,name,age):
# self.name = name
# self.age = age
#
# # 默认情况下 在类中定义的方法 都是绑定方法
# def say_hi(self):
# print("hello i am %s" % self.name)
#
# 当你创建对象时 发生什么
# 1.产生一个空对象 (名称空间)
# 2.自动调用__init__方法 并且把这个对象以及额外的参数传入
# p = Person("赵敏",17) # Person.__init__(p)
# p.say_hi()
#
# p2 = Person("谢逊",50)
# p2.say_hi()
# 经常使用的数据定义为变量
username = "jack"
pwd = "123"
db_name = "qq"
atm_usr = "jerry"
atm_pwd = "123"
#用于登录数据库
def login_data_base(username,pwd,db_name):
print("%s登录%s数据库 密码为%s" % (username,db_name,pwd))
def login_atm(usr,pwd):
print("%s 登录了ATM 密码为%s" % (usr,pwd))
login_data_base(username,pwd,db_name)
login_data_base(username,pwd,db_name)
login_data_base(username,pwd,db_name)
login_data_base(username,pwd,db_name)
login_atm(atm_usr,atm_pwd)
login_atm(atm_usr,atm_pwd)
login_atm(atm_usr,atm_pwd)
# login_data_base("rose","321","weix")
#绑定的好处是 将数据以及处理数据的方法绑定在一起 拿到对象就同时拿到数据和处理的方法
#直接调用即可
# 可以这么理解 :面向对象其实就是提高整合程度 把数据和方法整合到一起
class Student:
school = "oldboy"
def __init__(self,name):
self.name = name
# 默认情况下是绑定方法
def study(self,a):
print(self)
print(a)
# print("%s正在学习" % self.name)
# print(Student.study)
s = Student("jack")
# print(s.study)
s.study(100)
# 对于类而言study就是普通函数
# Student.study(1)
# 而对于对象而言 他是一个绑定方法 当使用对象来调用时 会自动将对象作为第一个参数传入
s1 = Student("rose")
print(id(s1.study))
print(id(s.study))
print(s1.study)
print(s.study)
# print(s.school)
# print(s1.school)
import time
class Person:
country = "china"
# init 也是绑定方法
def __init__(self,name,age):
self.name = name
self.age = age
@classmethod
def info(cls):
print(cls)
print("info run")
def sey_hi(self):
print("hello i am %s" % self.name)
# 是要输出这个类的一些信息
@classmethod
def class_info(cls):
print("this class %s is module:xxx.py" % cls.__name__)
# 输出当前时间
# 不需要访问类也不需要访问对象 所以直接做成非绑定方法
@staticmethod
def show_time(self):
print(time.localtime())
# p = Person("rose",20)
# p.info()
#
# print(Person)
# print(Person.info)
# Person.info()
# p = Person("rose",10)
# p.sey_hi()
# p = Person("周芷若",20)
#
# Person.class_info(p)
# Person.class_info()
p = Person("rose",1)
p.show_time(1)
Person.show_time(2)
#
# print(Person.show_time)
# print(p.show_time)
"""
需求设计王者荣耀中的英雄类,每个英雄对象可以对其他英雄对象使用技能
具备以下属性
英雄名称,等级,血量
和Q_hurt,W_hurt,E_hurt 三个属性,表示各技能的伤害量
具备以下技能
Q W E
三个技能都需要一个敌方英雄作为参数,当敌方血量小于等于0时角色死亡
涉及到英雄对象
属性:
名字 等级 血量
行为:
Q W E
需要一个英雄类
"""
class Hero:
def __init__(self,name,level,HP,Q_hurt,W_hurt,E_hurt):
self.name = name
self.level = level
self.HP = HP
self.Q_hurt = Q_hurt
self.W_hurt = W_hurt
self.E_hurt = E_hurt
def Q(self,enemy):
print("%s 对 %s 释放了 Q技能 造成了%s伤害" % (self.name,enemy.name,self.Q_hurt))
self.attack(enemy, self.Q_hurt)
def W(self,enemy):
print("%s 对 %s 释放了 W技能 造成了%s伤害" % (self.name, enemy.name, self.W_hurt))
self.attack(enemy, self.W_hurt)
def E(self,enemy):
print("%s 对 %s 释放了 E技能 造成了%s伤害" % (self.name, enemy.name, self.E_hurt))
self.attack(enemy,self.E_hurt)
def attack(self,enemy,hurt):
enemy.HP -= hurt
if enemy.HP <= 0:
print("%s 已被%s击杀" % (enemy.name, self.name))
# 创建两个英雄对象
arso = Hero("亚瑟","15",1000,30,500,200)
dj = Hero("妲己","15",800,300,10,800)
#
# dj.W(arso)
# dj.Q(arso)
# dj.E(arso)
arso.Q(dj)
arso.W(dj)
arso.E(dj)
dj.W(arso)
dj.Q(arso)
dj.E(arso)