zoukankan      html  css  js  c++  java
  • 23、类和对象的命名空间、组合

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

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

      1)、静态属性就是直接在类中定义的变量。

      2)、动态属性就是定义在类中的方法。

    • 首先定义一个类:
      
      class Course:
          language=['chinese']                    #静态属性
          def __init__(self,name,course_name,period,price):   #动态属性
              self.name=name
              self.course_name=course_name
              self.period=period
              self.price=price
          def func(self):
              pass
      Course.__dict__['language']= 'english'        #__dict__修改不了类中的静态变量(不可变数据类型)
      Course.language='english'                      #对于不可变数据类型来说,类变量最好用类名操作
      print(Course.language)
      
      python=Course('egon','python',6,20000)
      print(python.language)                           #类中的静态变量,可以被对象和类调用
      
      
      python.language[0]='enn'                       # 对于可变数据类型来说,对象名的修
      print(Course.language)                         #改是共享的,重新赋值是独立的
      python.language='germon'
      print(Course.language)



     

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

      在obj.name会首先从obj自己的名称空间里找name,找不到则去类中找,类也找不到就去父类。。。最后都找不到就会抛出异常。


    组合

    什么是组合?

      一个对象的属性值是另一个类的对象(太他么的复杂了……)

    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,outside_r,inside_r):     #圆环的属性
            self.outside_r=Circle(outside_r)  #圆环的属性是圆的对象
            self.inside_r=Circle(inside_r)
        def area(self):
            return self.outside_r.area()-self.inside_r.area()
        def perimeter(self):
            return self.outside_r.perimeter()+self.inside_r.perimeter()
    
    a=Circle(6)              #实例化
    print(a.area())
    print(a.perimeter())
    b=Circle(2)
    print(b.area())
    print(b.perimeter())
    
    c=Ring(6,2)
    print(c.area())
    print(c.perimeter())

  • 相关阅读:
    [动态规划]保存子问题的结果
    [字符串]第一个不重复的字符
    [抽象建模问题]扑克牌的顺子判断
    [算法]处理连续小段问题
    [动态规划]最长回文子串
    违法
    TCP的拥塞控制
    SpringBank 开发日志 一种简单的拦截器设计实现
    SPFILEOPENBANKDB.ORA 手动编辑产生问题
    springbank 开发日志 springbank是如何执行一个handler的requestMapping对应的方法的
  • 原文地址:https://www.cnblogs.com/wangyuxing/p/8297385.html
Copyright © 2011-2022 走看看