python_面向对象编程

发布时间:2019-05-10 22:51:33编辑:auto阅读(2070)

    初始面向对象

    一、类的实例化:

          调用类产生对象的过程称为类的实例化,
    实例化的结果是一个对象,或称为一个实例
    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)
    
    
    obj = People('carter', 18, 'male')
    
    # 会产生对象的名称空间,如何查看
    print(obj.__dict__)
    print(obj.name)
    实例化做了三件事
    1、先产生一个空对象
    2、自动触发类内部__init__函数的执行
    3、将空对象,以及调用类括号内传入的参数,一同传给__init__,为对象定制独有的属性

    对象的增删改查
    obj.hobby = 'beauty'  # 增加
    del obj.name  # 删除
    obj.age = '20'  # 修改
    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('carter',18,'male') #People.__init__(obj,'carter',18,'male')
    obj1=People('carter1',18,'male') #People.__init__(obj,'carter1',18,'male')
    obj2=People('carter2',18,'male') #People.__init__(obj,'carter2',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)
    
    

    三、绑定方法的特殊之处:

        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('carter',18,'male') #People.__init__(obj,'carter',18,'male')
    
    obj.run()
    obj1.run()
    obj2.run()
    
    print(People.f1)
    People.f1()
    print(obj.f1)
    obj.f1() #People.f1(obj)

    小练习

    class People:
        def __init__(self, name, aggressiveness, life_value):
            self.name = name
            self.aggressiveness = aggressiveness
            self.life_value = life_value
    
        def bite(self, enemy):
            enemy.life_value -= self.aggressiveness
            print("""
            [%s]咬了一条[%s]
            狗掉血[%s]
            狗还剩血量[%s]
            """ % (self.name, enemy.name, self.aggressiveness, enemy.life_value))
    
    
    class Dog:
        def __init__(self, name, aggressiveness, life_value):
            self.name = name
            self.aggressiveness = aggressiveness
            self.life_value = life_value
    
        def bite(self, enemy):
            enemy.life_value -= self.aggressiveness
            print("""
            [%s]咬了一个[%s]
            人掉血[%s]
            人还剩血量[%s]
            """ % (self.name, enemy.name, self.aggressiveness, enemy.life_value))
    
    
    p1 = People('', 60, 100)
    d1 = Dog('', 80, 200)
    
    p1.bite(d1)
    d1.bite(p1)
    人狗大战
    
    
    from math import pi
    
    class Circle:
        '''
        定义了一个圆形类;
        提供计算面积(area)和周长(perimeter)的方法
        '''
        def __init__(self,radius):
            self.radius = radius
    
        def area(self):
             return pi * self.radius * self.radius
    
        def perimeter(self):
            return 2 * pi *self.radius
    
    
    circle =  Circle(10) #实例化一个圆
    area1 = circle.area() #计算圆面积
    per1 = circle.perimeter() #计算圆周长
    print(area1,per1) #打印圆面积和周长
    计算圆面积和周长

     




关键字