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)

  • 相关阅读:
    html 上传图片前预览
    php获取当月天数及当月第一天及最后一天、上月第一天及最后一天实现方法
    php 计算 pdf文件页数
    php 获取半年内每个月的订单数量, 总价, 月份
    php 获取两个数组之间不同的值
    小程序支付功能
    关于nginx的Job for nginx.service failed because the control process exited with error code.错误
    linux 安装 Apollo
    MongoDB待续。。。
    ABP vNext...待续
  • 原文地址:https://www.cnblogs.com/maojiang/p/8799404.html
Copyright © 2011-2022 走看看