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):
passCourse.__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())