zoukankan      html  css  js  c++  java
  • 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)



  • 相关阅读:
    Handling Configuration Changes with Fragments
    Android基础——Fragment与Activity交互
    Android基础——Fragment与Activity交互
    Activity和Fragment生命周期对比
    Activity和Fragment生命周期对比
    移动端与PHP服务端接口通信流程设计(基础版)
    移动端与PHP服务端接口通信流程设计(基础版)
    ROW/COW 快照技术原理解析
    ROW/COW 快照技术原理解析
    OpenStack 实现技术分解 (5) 应用开发 — 使用 OpenStackClients 进行二次开发
  • 原文地址:https://www.cnblogs.com/tingguoguoyo/p/10896549.html
Copyright © 2011-2022 走看看