zoukankan      html  css  js  c++  java
  • 面向对象1

    1,类和对象

    python中一切皆为对象,类型的本质就是类。

    >>> dict #类型dict就是类dict
    <class 'dict'>
    >>> d=dict(name='eva') #实例化
    >>> d.pop('name') #向d发一条消息,执行d的方法pop
    'eva'

    在python中,用变量表示特征,用函数表示技能(方法),因而具有相同特征和技能的一类事物就是'类',对象则是这一类事物中具体的一个。

    1.1类

    class 类名:

    #创建一个类
    class Preson:
        pass
    
    
    class Preson:
        role =“peron”    #静态属性
        def walk(self):     #方法,动态属性
            print"person is walking..."

    类的两种作用:属性引用,实例化

    # class Person:                 # 类名
    #     country = 'China'         # 创造了一个只要是这个类就一定有的属性
    #                                # 类属性 静态属性
    #     def __init__(self,*args):  # 初始化方法,self是对象,是一个必须传的参数
    #         # self就是一个可以存储很多属性的大字典
    #         self.name = args[0]   # 往字典里添加属性的方式发生了一些变化
    #         self.hp = args[1]
    #         self.aggr = args[2]
    #         self.sex = args[3]
    #
    #     def walk(self,n):         # 方法,一般情况下必须传self参数,且必须写在第一个
    #                               # 后面还可以传其他参数,是自由的
    #         print('%s走走走,走了%s步'%(self.name,n))
    #
    # # print(Person.country)        # 类名 可以查看类中的属性,不需要实例化就可以查看
    # alex = Person('狗剩儿',100,1,'不详')  # 类名还可以实例化对象,alex对象   # 实例化
    # # print(alex.__dict__) # 查看所有属性
    # print(alex.name)  # 查看属性值
    # # print(alex.hp)  # 查看属性值
    # alex.walk(5)    # Person.walk(alex,5)  # 调用方法 类名.方法名(对象名)

    关于self:在实例化是自动讲对象/实例本身传给__init__的第一个参数,可以换名字。

    1.2对象

    对象=类名()

    对象是关于类而实际存在的一个例子,对象/实例只有一种作用:属性引用

    调用的固定模式:

    class 类名:
        def __init__(self,参数1,参数2):
            self.对象的属性1 = 参数1
            self.对象的属性2 = 参数2
    
        def 方法名(self):pass
    
        def 方法名2(self):pass
    
    对象名 = 类名(1,2)  #对象就是实例,代表一个具体的东西
                      #类名() : 类名+括号就是实例化一个类,相当于调用了__init__方法
                      #括号里传参数,参数不需要传self,其他与init中的形参一一对应
                      #结果返回一个对象
    对象名.对象的属性1   #查看对象的属性,直接用 对象名.属性名 即可
    对象名.方法名()     #调用类中的方法,直接用 对象名.方法名() 即可

    1.3对象之间的交互

    # class Dog:
    #     def __init__(self,name,blood,aggr,kind):
    #         self.name = name
    #         self.hp = blood
    #         self.aggr = aggr
    #         self.kind = kind
    #     def bite(self,person):
    #         # 狗咬人,人掉血
    #         person.blood -= self.aggr
    # class Person:
    #     def __init__(self,name,blood,aggr,sex):
    #         self.name = name
    #         self.blood = blood
    #         self.aggr = aggr
    #         self.sex = sex
    #     def attack(self,dog):
    #         dog.hp -= self.aggr
    #         if dog.hp <= 0:
    #             print('%s打了%s,%s被打死了,扑街~~~'%(self.name,dog.name,dog.name))
    #         else:
    #             print('%s打了%s,掉了%s血'%(self.name,dog.name,self.aggr))
    # jin = Dog('金老板',100,20,'teddy')
    # # print(jin.name)
    # alex = Person('alex',999,998,'不详')
    # jin.bite(alex)   # Dog.bite(jin,alex)
    # print(alex.blood)
    # # alex attack
    # alex.attack(jin)  # Person.attack(alex,jin)
    # print(jin.hp)
    人狗之战

    2,类和对象命名空间

    类里可以定义两种属性:静态属性。动态属性

    创建一个类就会创建一个类的名称空间,用来存储类中定义的名字,这些名字称为类的属性

    创建一个对象就会创建一个对象的名称空间。存放对象/实例的名字,称为对象/实例的属性

    类中的静态变量可以被对象和类调用

    对于不可变数据类型来说,类变量最好用类名操作,

    对于可变数据类型来说,对象名的修改是共享的,重新赋值是独立的

    # 类里的名字有 类变量(静态属性量)+ 方法名(动态属性)
    # 对象里的名字 对象属性
    # 对象 —— > 类
    # 对象找名字 : 先找自己的 找类的 再找不到就报错
    # 对象修改静态属性的值
        # 对于不可变数据类型来说,类变量最好用类名操作
        # 对于可变数据类型来说,对象名的修改是共享的,重新赋值是独立的
    class Course:
        language=["Chinese"]                                              #language="Chinese"
        def __init__(self,teacher,course_name,period,price):
            self.teacher=teacher
            self.course_name=course_name
            self.period=period
            self.price=price
        def func(self):
            pass
    Course.language[0]="df"                                           #Course.language="df"  
    linux=Course("egon","py","6 months",20000)            #print(linux.language)
    print(linux.language)                                                   #print(Course.language)
    print(Course.language)
    linux.language[0]="hu"                                              #linux.language="hu"
    print(linux.language)                                                  #print(linux.language)
    print(Course.language)                                                #print(Course.language)   
    #  ['df']                                                                     #df
    ['df']                                                                           df             
     ["hu"]                                                                         du             
     ["hu"]                                                                          df            
                                                                                                       
    View Code

    2.2绑定方法

    # def func():pass
    # print(func)
    #
    # class Foo:
    #     def func(self):
    #         print('func')
    #     def fun1(self):
    #         pass
    # f1 = Foo()
    # print(Foo.func)
    # print(f1.func)
    # print(f1.fun1)
    #<bound method Foo.func of f1
    # 包 —— __init__
    # import package —— 类的实例化的过程
    # import time
    # time.time()

    2.3组合

    组合:一个对象的属性值是另外一个类的对象(在一个类中以另外一个类的对象作为数据属性,称为类的组合)

    什么时候用:当类之间有显著不同,并且较小的类是较大类所需要的组件时,用组合。(什么是什么)

     

    #圆环的面积
    # from math import pi
    # class Circle:
    #     def __init__(self,r):
    #         self.r=r
    #     def area(self):
    #         return self.r**2*pi
    #     def perimeter(self):
    #         return 2*pi*self.r
    # class Ring:
    #     def __init__(self,out_r,ins_r):
    #         self.out_c=Circle(out_r)
    #         self.ins_c=Circle(ins_r)
    #     def area(self):
    #         return self.out_c.area()-self.ins_c.area()
    #     def perimerter(self):
    #         return self.out_c.perimeter()+self.ins_c.perimeter()
    # ring=Ring(20,10)
    # print(ring.area())
    # print(ring.perimerter())
    圆环的面积
    # class Birthday:
    #     def __init__(self,year,month,day):
    #         self.year=year
    #         self.month=month
    #         self.day=day
    # class Course:
    #     def __init__(self,cou_name,period,piric):
    #         self.name=cou_name
    #         self.period=period
    #         self.piric=piric
    # class Teacher:
    #     def __init__(self,name,age,sex,birthday):
    #         self.name=name
    #         self.age=age
    #         self.sex=sex
    #         self.birthday=birthday
    #         self.course = Course('python', '6 month', 2000)
    # b=Birthday(2020,2,13)
    # egg=Teacher("egon",0,"女",b)
    # print(egg.name)
    # print(egg.sex)
    # print(egg.birthday.day)
    # print(egg.course.piric)
    View Code
  • 相关阅读:
    前端程序员容易忽视的一些基础知识
    一道前端学习题
    Unity调用Windows对话框保存时另存为弹框
    Unity镜子效果的实现(无需镜子Shader)
    Unity射线检测的用法总结
    unity中实现简单对象池,附教程原理
    Unity调用Window提示框Yes/No(英文提示窗)
    Unity调用Windows弹框、提示框(确认与否,中文)
    C#LinQ语法
    服务器的购买与网站的创建
  • 原文地址:https://www.cnblogs.com/glf1160/p/8297436.html
Copyright © 2011-2022 走看看