23、类和对象的命名空间、组合

时间:2022-09-08 09:21:11

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

23、类和对象的命名空间、组合