zoukankan      html  css  js  c++  java
  • 类与对象

    类有两种属性:数据属性和函数属性
    1,类的数据属性是所有对象共享的
    print(id(OldboyStudent.school))
    print(id(s1.school)
    print(id(s2.school))

    类的函数属性是绑定给对象使用的,obj.method称为绑定方法,内存地址都不一样
    print(people.run)
    2,类的函数属性是绑定给对象用的
    #一、类的实例化:调用类产生对象的过程称为类的实例化,实例化的结果是一个对象,或称为一个实例
    class People:
        def __init__(self,name,age,sex):
            self.name=name
            self.age=age
            self.sex=sex

        def run(self):
            print('%s is running' %self.name)

    #实例化做了三件事
    #1、先产生一个空对象
    #2、自动触发类内部__init__函数的执行
    #3、将空对象,以及调用类括号内传入的参数,一同传给__init__,为对象定制独有的属性
    # obj=People('egon',18,'male') #People.__init__(obj,'egon',18,'male')

    # 会产生对象的名称空间,如何查看
    # print(obj.__dict__)

    #二;对象的操作
    # print(obj.name) #obj.__dict__
    # obj.education='哈佛'
    # del obj.name
    # obj.age=19
    # print(obj.__dict__)


    #三:对象属性的查找顺序:先找对象自己的名称空间----》类的名称空间
    class People:
        x=1
        def __init__(self,name,age,sex):
            self.name=name
            self.age=age
            self.sex=sex

        def run(self): #self=obj
            print('%s is running' %self.name) #obj.name

    obj=People('egon',18,'male') #People.__init__(obj,'egon',18,'male')
    obj1=People('egon1',18,'male') #People.__init__(obj,'egon',18,'male')
    obj2=People('egon2',18,'male') #People.__init__(obj,'egon',18,'male')

    #1、类的数据属性:是给对象用的,而且直接共享给所有对象用的,内存地址都一样
    # print(People.x)
    # People.x=11111

    # print(id(People.x),People.x)
    # obj.x='obj================》'
    # print(id(obj.x),obj.x)
    # print(id(obj1.x),obj1.x)
    # print(id(obj2.x),obj2.x)


    #2、类的函数属性:也是给对象用,但是绑定给对象用的,绑定到不同的对象就是不同的
    #绑定方法,内存地址都不一样,但其实只想都是同一个功能
    # print(People.run) #<function People.run at 0x00000226E7C78A60>
    # People.run(123123)
    # People.run(obj)

    # print(obj.run)
    # print(obj1.run)
    # print(obj2.run)

    # # 实例化一个对象 obj

    # obj = People('fixd',18,'male')

    #

    #

    # print(obj.name) #查看 属性name的值

    # obj.education='哈佛' # 添加属性

    # del obj.name # 删除属性

    # obj.age=19 # 修改属性值

    # print(obj.__dict__) # 查看实例化对象的名称

    #四:绑定方法的特殊之处:
    #1、 绑定给谁就应该由谁来调用,
    #2、谁来调用就会把谁当做第一个参数传入
    class People:
        x=1
        def __init__(self,name,age,sex):
            self.name=name
            self.age=age
            self.sex=sex

        def run(self): #self=obj
            print('%s is running' %self.name) #obj.name

        def f1():
            print('from f1')

        def f2(self):
            pass

    obj=People('egon',18,'male') #People.__init__(obj,'egon',18,'male')
    # obj1=People('egon1',18,'male') #People.__init__(obj,'egon',18,'male')
    # obj2=People('egon2',18,'male') #People.__init__(obj,'egon',18,'male')
    #
     obj.run()
     obj1.run()
     obj2.run()

     print(People.f1)
     People.f1()
     print(obj.f1)
     obj.f1() #People.f1(obj)


    五:一切皆对象:在python3中统一了类与类型的概念,类即类型
    l=list([1,2,3])
     print(type(l))

     print(type(obj))

    练习人狗大战
    class People:
        def __init__(self,name,aggresivity,life_value=100):
            self.name=name
            self.aggresivity=aggresivity
            self.life_value=life_value
        def bite(self,enemy):
            enemy.life_value-=self.aggresivity
            print('''
            人[%s] 咬了狗一口[%s]
            狗掉血[%s]
            狗还剩血量[%s]
            ''' %(self.name,enemy.name,self.aggresivity,enemy.life_value)
                  )
    class Dog:
        def __init__(self,name,dog_type,aggresivity,lise_value):
            self.name=name
            self.dog_type=dog_type
            self.aggresivty=aggresivity
            self.life_value=lise_value
        def bite(self,enemy):
            enemy.life_value-=self.aggresivty
            print('''
            狗[%s]咬了人一口[%s]
            人掉血[%s]
            人还剩血量[%s]
            ''' %(self.name,enemy.name,self.aggresivty,enemy.life_value)
                  )

    p1=People('LXX',60)
    d1=Dog('liji',"占鳌",200,200)

    p1.bite(d1)
    #d1.bite(p1)

  • 相关阅读:
    跃迁方法论 Continuous practice
    EPI online zoom session 面试算法基础知识直播分享
    台州 OJ 2648 小希的迷宫
    洛谷 P1074 靶形数独
    洛谷 P1433 DP 状态压缩
    台州 OJ FatMouse and Cheese 深搜 记忆化搜索
    台州 OJ 2676 Tree of Tree 树状 DP
    台州 OJ 2537 Charlie's Change 多重背包 二进制优化 路径记录
    台州 OJ 2378 Tug of War
    台州 OJ 2850 Key Task BFS
  • 原文地址:https://www.cnblogs.com/maojiang/p/8799404.html
Copyright © 2011-2022 走看看