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())

  • 相关阅读:
    运行 npm run dev 不能自动打开浏览器
    npm run dev 报错:Strings must use singlequote 的解决方法
    new和this
    new Object()、Object.create()、{}三种对象创建方式的区别
    Python 详解修饰器 附带 js使用修饰器
    Python
    react项目使用axios和Charles模拟数据接口
    react切换隐藏或显示状态(包含过渡动画)
    react里使用ref的几种方法
    js对象转数组
  • 原文地址:https://www.cnblogs.com/wangyuxing/p/8297385.html
Copyright © 2011-2022 走看看