• Python之面向对象初识


    什么是类?什么是对象?

      类是抽象的,代表着一类事物的属性和方法,但不知道具体的值

      对象是有具体的值,属性和方法都根据类规范

      类名的作用:查看操作属性

    # 对象 = 类名()  # 实例化
    # 过程:
        # 类名() 首先 会创造出一个对象,创建了一个self变量
        # 调用init方法,类名括号里的参数会被这里接收
        # 执行init方法
        # 返回self
    # 对象能做的事:
        # 查看属性
        # 调用方法
        # __dict__ 对于对象的增删改查操作都可以通过字典的语法进行
    # 类名能做的事:
        # 实例化
        # 调用方法 : 只不过要自己传递self参数
        # 调用类中的属性,也就是调用静态属性
        # __dict__ 对于类中的名字只能看 不能操作

      eg:矩形的周长和面积

    class Rectangle:  # 矩形的面积和周长
        special = '我最好看'  # 静态属性,只要是这个类就一定会有的属性,不需要实例化就可查看
        def __init__(self,a,b):  # 实例化时会创建一个self对象,会默认调用__init__方法接受参数
            self.longSide = a   # 最后self会返回给对象
            self.shortSide = b
    
        def area(self):  # 类中定义的方法必须传参,且必须写在第一个,当使用对象调用方法时默认self是对象本身
            return self.longSide*self.shortSide
    
        def perimeter(self):
            return 2*(self.longSide+self.shortSide)
    
    
    r1 = Rectangle(5,6)  # 实例化
    print(r1.area(), r1.perimeter())  # 对象.方法() 调用方法
    print(Rectangle.special, r1.special)  # 静态属性可以用类名查看也可以用对象查看
    print(r1.longSide)
    r1.longSide = 6  # 对象的修改操作
    print(r1.longSide)
    r1.__dict__['longSide'] = 7  # 可以通过字典的方式修改
    print(r1.longSide)

    类命名空间与对象、实例的命名空间

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

    2、类有两种属性:静态属性和动态属性

    • 静态属性就是直接在类中定义的变量,静态属性不能通过类的字典修改,但可以通过类名.属性名='  ' 修改
    • 动态属性就是定义在类中的方法

    3、静态属性是类共享给所有对象的,动态属性是绑定到所有对象的

    注意:

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

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

      3、当对象调用类里方法时,把对象与方法产生了绑定关系,而类名调函数不产生绑定关系

    class A:
        a = '我是一直小小鸟'
        l = [1]
    
    
    a_1 = A()
    a_2 = A()
    print(a_1.a, a_2.a, A.a)  # 可以看到两个对象都有类的静态属性
    a_1.a = '想要飞的更高'  # 这时修改对象a_1的静态属性
    print(a_1.a, a_2.a, A.a)  # 发现只有对象a_1修改了,这是因为对象a_1创建了自己的a属性
    A.a = '飞的更高'  # 使用类名修改静态属性
    print(a_1.a, a_2.a, A.a)  # 发现对象a_2的属性跟着修改,a_1不变的原因是有了自己的a属性
    del a_1.a            # 这时删掉a_1对象自己的a属性
    print(a_1.a, a_2.a, A.a)  # 发现两个对象的属性都随类属性的变化而改变
    
    print(a_1.l, a_2.l, A.l)
    a_1.l[0] = 'aaa'  # 修改对象a_1的动态属性
    print(a_1.l, a_2.l, A.l)  # 发现所有的动态属性跟着变化
    a_2.l = ['222']           # 对对象a_2.l进行重新赋值
    print(a_1.l, a_2.l, A.l)  # 发现只有a_2变化了

    组合:一个对象的属性值是另一个类的对象

    eg:圆环的面积与周长

    from math import pi
    class Circle:
        def __init__(self,r):
            self.r = r
    
        def area(self):
            return pi*(self.r**2)
    
        def peremiter(self):
            return 2*pi*self.r
    
    
    class Ring:
        def __init__(self, out_r, in_r):
            self.out_circle = Circle(out_r)  # 这里发生了组合,圆环的属性是圆类的对象
            self.in_circle = Circle(in_r)
    
        def ring_area(self):
            return self.out_circle.area()-self.in_circle.area()
    
        def ring_peremiter(self):
            return self.out_circle.peremiter()+self.in_circle.peremiter()
    
    r = Ring(20,10)
    print(r.ring_area())
    print(r.ring_peremiter())
  • 相关阅读:
    yaf(3) 正则路由
    yaf(1) 配置文件
    PHP 分页URL设计
    smarty模版目录疑问
    yaf(5) smarty
    yaf(2) layout 自定义目录结构
    php 倒计时出现0的情况
    PHP 单一入口框架设计简析
    利用jquery.load()实现html框架效果
    yaf(4) Yaf_Loader()
  • 原文地址:https://www.cnblogs.com/xfdhh/p/10916068.html
Copyright © 2020-2023  润新知