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