• day24 面向对象,交互,组合,命名空间,初始继承


    面向对象的命名空间:

    #属性:静态属性 (直接和类名关联或者直接定义在class下的变量)
        # 对象属性 (在类内和self关联,在类外和对象名关联的变量)
        #  动态属性(函数)
    
    class Foo:
        country = 'China'
        country_lst = ['China']
        def __init__(self,name):
            self.name = name
    
    alex = Foo('alexander')
    egg = Foo('egon')
    alex.age = 90
    alex.country_lst = []
    alex.country_lst.append('印度')
    # print(Foo.country_lst)
    # Foo.role = 'Person'
    # print(Foo.country)
    # print(alex.name)
    # print(egg.name)
    # Foo.country
    # alex.country = '印度'
    # print(alex.country)
    # print(egg.country)
    # print(Foo.country)
    # del alex.country
    # print(alex.country)
    # print(alex.country_lst)
    # alex.country_lst.append('印度')
    # print(alex.country_lst)
    # print(egg.country_lst)
    # print(Foo.country_lst)
    #类名操作变量 不管操作可变还是不可变数据类型 都是类中对应的变量发生变化
    #对象名操作静态变量
    #引用变量:现在自己的命名空间中查找,找不到就去类的命名空间找
    #修改变量:
    # 如果是对可变数据类型中的元素进行修改,那么全局生效
    # 如果是对变量进行重新赋值,那么只是在对象自己的命名空间里增加了一个新的属性
    # 结论:应该尽量用类名去使用静态变量
    
    # 设计一个类,统计这个类被实例化的次数,且所有的对象共享这个属性
    # class Foo:
    #     count = 0
    #     def __init__(self):
    #         Foo.count += 1
    #
    # f = Foo()
    # f2 = Foo()
    # f3 = Foo()
    # print(f.count) #Foo.count
    # print(f2.count) #Foo.count
    # print(f3.count) #Foo.count
    
    class Person:
        def __init__(self):pass
            #给一个什么属性都没有的对象赋一些初识的属性
        def eat(self):
            print('吃猪食')
    
    alex = Person()  #裸着
    print(alex.__dict__)
    alex.name = 'alexander'
    # alex.eat = '泔水'  #对象使用名字的顺序:先用自己的,再用类的
    # alex.eat()
    #对象可以使用类的
    #而类无法使用对象的
    # print(Person.eat)
    # print(alex.eat)  #类对象指针的东西  alex = {'eat':eat}
    View Code

    组合:

    #函数
    #定义 调用 返回值 参数、命名空间和作用域
    
    #面向对象
    #定义 、命名空间
    #三大特性:封装继承和多态(组合)
    
    #组合 : 什么 有 什么 的关系
    #一个对象的属性是另外一个类的对象
    #老师有生日
    # class Teacher:
    #     def __init__(self,name,age,sex):
    #         self.name = name
    #         self.age = age
    #         self.sex = sex
    #         # self.birth_year = year
    # class Birthday:
    #     def __init__(self,year,month,day):
    #         self.year = year
    #         self.month = month
    #         self.day = day
    # birthay1 = Birthday(1968,12,31)
    # boss_gold = Teacher('太亮',40,'不详')
    # boss_gold.birth = birthay1
    # boss_gold.birth.year  #boss_gold.bith.year
    #老师有生日 : 年月日
    #将一个类的对象拥有的属性 再将其定义成一个类以提高代码的复用
    # class Teacher:
    #     def __init__(self,name,age,sex,year,month,day):
    #         self.name = name
    #         self.age = age
    #         self.sex = sex
    #         self.birth = Birthday(year,month,day)
    # class Birthday:
    #     def __init__(self,year,month,day):
    #         self.year = year
    #         self.month = month
    #         self.day = day
    # boss_gold = Teacher('太亮',40,'不详',1968,12,31)
    # print(boss_gold.birth)
    
    #圆形类
    from math import pi
    class Circle:
        def __init__(self,r):
            self.radius = r
        def perimeter(self):
            return 2*pi*self.radius
        def area(self):
            return pi*(self.radius**2)
    #环形类
    class Ring:
        def __init__(self,outer_r,inner_r):
            self.outer_circle = Circle(outer_r)
            self.inner_circle = Circle(inner_r)
        def perimeter(self):
            return self.outer_circle.perimeter()+self.inner_circle.perimeter()
        def area(self):
            return self.outer_circle.area() - self.inner_circle.area()
    r1 = Circle(5)
    print(r1.perimeter())
    print(r1.area())
    r = Ring(10,8)
    print(r.perimeter())
    print(r.area())
    # 既能hold住圆形的问题
    # 又能解决环形的问题
    #10,20
    # def func(arg1,arg2):
    #     outer_circle = Circle(20)
    #     inner_circle = Circle(10)
    #     print(outer_circle.area() - inner_circle.area())
    #
    # def func2(arg1,arg2):
    #     outer_circle = Circle(20)
    #     inner_circle = Circle(10)
    #     print(outer_circle.perimeter() + inner_circle.perimeter())
    # # 500个环
    # ring1 = Ring(20,10)
    # ring1.area()
    #思想 —— 技术
    
    #面向对象 命名空间
    #组合 : 老师有生日,环中有圆
    #游戏 :组合
    View Code

    组合例题:

    #
    class Dog:  # 定义一个狗类
        def __init__(self, name, breed, aggressivity, life_value):
            self.name = name  # 每一只狗都有自己的昵称;
            self.breed = breed  # 每一只狗都有自己的品种;
            self.aggressivity = aggressivity  # 每一只狗都有自己的攻击力;
            self.life_value = life_value  # 每一只狗都有自己的生命值;
    
        def bite(self,people):
            people.life_value -= self.aggressivity
    #
    class Person:  # 定义一个人类
        def __init__(self, name, aggressivity, life_value, money):
            self.name = name  # 每一个角色都有自己的昵称;
            self.aggressivity = aggressivity  # 每一个角色都有自己的攻击力;
            self.life_value = life_value  # 每一个角色都有自己的生命值;
            self.money = money
    
        def attack(self,dog):
            dog.life_value -= self.aggressivity
    
        def get_weapon(self,weapon_obj):
            if self.money > weapon_obj.price:
                self.money -= weapon_obj.price  # 金老板花钱买武器
                self.weapon = weapon_obj  # 金老板装备打狗棒
                self.aggressivity += weapon_obj.aggr  # 金老板的攻击力增加了
    
    # boss_gold = Person('金老板',5,250,100)
    # huang = Dog('大黄','藏獒',100,3000)
    # huang.bite(boss_gold)
    # print(boss_gold.life_value)
    # boss_gold.attack(huang)
    # print(huang.life_value)
    #不公平
    #武器装备
    #人 有 武器 —— 组合
    #武器:攻击力,名字,价格
    class Weapon:
        def __init__(self,name,price,aggr):
            self.name = name
            self.price = price
            self.aggr = aggr
    dgb = Weapon('打狗棒',99.8,100)
    boss_gold = Person('金老板',5,250,100)
    huang = Dog('大黄','藏獒',100,3000)
    boss_gold.get_weapon(dgb)
    boss_gold.attack(huang)
    print(huang.life_value)
    
    #游戏的组合
    #人可以有装备 ——
    #狗 ——
    
    #组合和命名空间
    #继承的一点知识
    View Code

    初识继承:

    # 面向对象的三大特性之一 —— 继承
    # 继承 :至少两个类 : 什么 是 什么 的关系,为了避免几个类之间有相同的代码
    # 父类 : Animal
    # 子类 : Dog、Person
    #动物
    class Animal:
        def __init__(self,name,aggressivity,life_value):
            self.name = name
            self.aggressivity = aggressivity
            self.life_value = life_value
    #
    class Dog(Animal):  # 定义一个狗类
        def bite(self,people):
            people.life_value -= self.aggressivity
    #
    class Person(Animal):  # 定义一个人类
        def attack(self,dog):
            dog.life_value -= self.aggressivity
    
        def get_weapon(self,weapon_obj):
            if self.money > weapon_obj.price:
                self.money -= weapon_obj.price  # 金老板花钱买武器
                self.weapon = weapon_obj  # 金老板装备打狗棒
                self.aggressivity += weapon_obj.aggr  # 金老板的攻击力增加了
    huang = Dog('大黄',100,3000)   #__init__ 找父类
    print(huang.life_value)
    boss_gold = Person('金老板',5,250)  #__init__ 自己没有 找父类
    print(boss_gold.life_value)
    # Dog.bite(Person)
    print(Dog.__bases__)
    print(Animal.__bases__)
    
    #python 两种类:经典类 新式类
    #python3 新式类 —— 都默认继承object class Animal(object): == class Animal:
    #python2 经典类和新式类 并存
            #class Animal:  经典类 —— 继承顺序 个别使用方法
            #class Animal(object):  新式类
    #两个类中有相同的代码,
    # 继承:把相同的代码放在父类中,子类的对象在子类中没有找到方法的时候,使用父类的
    # 单继承和多继承
    # 父类 超类 基类
    # 子类 派生类
    # 抽象和继承
    View Code
  • 相关阅读:
    通用接口测试用例设计(转载)
    Jenkin配置执行远程shell命令
    Jenkins创建Maven项目及SSH部署
    Jenkins插件安装和系统配置
    Jenkins+svn+ant+tomcat持续集成
    Jmeter之Bean shell使用(二)
    numba,让python速度提升百倍
    哪吒票房超复联4,100行python代码抓取豆瓣短评,看看网友怎么说
    小白如何入门 Python 爬虫?
    干货!小白入门Python数据科学全教程
  • 原文地址:https://www.cnblogs.com/2012-dream/p/7867058.html
Copyright © 2020-2023  润新知