zoukankan      html  css  js  c++  java
  • 初识面向对象一(概念/组合)

    python中一切皆对象
    # 类 : 具有相同属性和方法的一类事务
    # 描述一类事务轮廓的一个机制
    # 商品/用户/店铺
    # 对象/实例 :对象(实例)就是类的实例化
    # 对象就是类的一个具体的表现
    # 某一件特定的商品/某个人/某一家店
    # 实例化 : 类 --> 对象
    # 实例化的过程:
    # 1.创建一个属于对象的空间
    # 2.执行__init__,把这个空间传递给init的第一个参数
    # 3.把这个空间地址作为返回值返回给对象变量
    # 如何定义一个类
    # class Cls:pass
    # 在类中直接可以定义的内容:
    # 静态属性 : 这个类拥有的,所有的对象都共享的属性
    # 动态属性 : 方法定义在类中的函数,描述的是所有对象共享的行为
    # 类名的作用:
    # 实例化的时候 对象 = 类名()
    # 操作静态属性
    # 对象名的作用:
    # 操作对象的属性
    # 调用方法
    类中代码的执行顺序
    # 一个类可不可以没有__init__? 可以
    # 在没有__init__的情况下,实例化经历了哪些步骤???
    # 1.创建一个空间给对象
    # 2.将这个空间的地址返回

    # class A:
    # Country = 'China'
    # def __init__(self,name):
    # self.name = name
    # def talk(self):
    # print('%s is talking'%self.name)
    # 类中的代码是在什么时候执行的? 在实例化之前
    # 类的命名空间中有什么:
    # 静态属性
    # 动态属性(方法)

    # 对象的命名空间和类的命名空间之间的关系 :
    # 对象和类之间有一个单向的联系,类对象指针
    # 对象在使用某个名字的时候,如果在自己的空间中没有找到,就要到类的空间中去找
    # class A:
    # Country = 'China'
    # def __init__(self,name):
    # self.name = name
    # def talk(self):
    # print('%s is talking'%self.name)
    #
    # asd= A('asd') 在实例化的过程中,又开辟了属于对象的一块空间

    # 对象可以查看类的静态属性,但是不能修改
    # 并且一旦修改,就不能取到类当中的内容了(除非手动删除这个修改的属性)

    # 所有的静态属性的修改,都应该由类名来完成,而不应该使用对象名来完成

    # 写一个类,能够记录这个类有多少个对象了(每一次实例化都能够被记录下来)
    # class A:
    # count = 0
    # def __init__(self):
    # A.count += 1
    # print(A.count)
    # a = A()
    # print(A.count)
    #
    # class A:
    # count = 0
    # def __init__(self):
    # self.counter()
    # def counter(self):
    # A.count+=1
    # a = A()
    # 如果静态变量是一个不可变数据类型,那么只要对象修改这个数据,就相当于在对象的空间中新建
    # 如果静态变量是一个可变数据类型,那么对象修改这个容器中的元素,相当于修改类的空间中的元素
    # 如果静态变量是一个可变数据类型,那么对象直接对这个变量重新赋值,相当于修改对象自己空间中的元素

    # 大结论
    # 只要是静态变量,就用类名去修改,永远修改成功,并且所有的对象都共享这个改变


    # 总结
    # 对象的命名空间:类指针对象的所有属性
    # 类的命名空间:方法和(静态属性字段)
    # 对象在寻找名字的时候 : 先找对象自己内存空间中的,找不到就去类的命名空间中寻找
    # 类中的名字是什么时候写入内存的 : 代码从上到下执行的时候就已经写入的.一定是在实例化之前
    # 静态变量 : 尽量用类名去操作

    组合
    计算圆跟环形的周长面积
    from math import pi
    class Circle:
    def __init__(self,r):
    self.r = r

    def area(self):
    return pi*self.r**2

    def perimeter(self):
    return 2*pi*self.r

    class Ring:
    def __init__(self,outer_r,inner_r):
    c1 = Circle(outer_r)
    c2 = Circle(inner_r)
    self.out_c = c1 # c1.area() self.out_c.area()
    self.in_c = c2 # c2.area() self.in_c.area()

    def area(self):
    return self.out_c.area() - self.in_c.area()

    def perimeter(self):
    return self.out_c.perimeter() + self.in_c.perimeter()

    r1 = Ring(10,5)
    print(r1.area())
    print(r1.perimeter())


     


     
  • 相关阅读:
    PHP 版本判断 version_compare() 函数
    PHP 版本判断 version_compare() 函数
    PHP 版本判断 version_compare() 函数
    PHP 版本判断 version_compare() 函数
    centos7安装redis
    centos7安装redis
    centos7安装redis
    centos7安装redis
    django detail实现
    Django 捕获url
  • 原文地址:https://www.cnblogs.com/Godisgirl/p/10013928.html
Copyright © 2011-2022 走看看