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)



原文地址:https://www.cnblogs.com/tingguoguoyo/p/10896549.html