(八)面向对象----(一)
目录
8.1类的创建
class 类名:
属性 = 'a'
print(类名.属性)
class Dog(): #python中首字母大写的名称一般为类
def __init__(self,name,age): #初始化方法
self.name = name
self.age = age
def sit(self):
print(self.name.title() + ' is now sitting')
yuki = Dog('yuki',2) #根据类创建对象称为实例化
print(yuki.age) #访问属性
print(yuki.name)
Dog.sit(yuki)
yuki.sit() #调用方法
对象 = 类名()称为实例化
创建过程: 类名()
首先 会创造出一个对象,创建了一个self变量
调用init方法,类名括号里的参数会被这里接收
执行init方法
返回self
对象能做的事:调用方法
访问属性,可使用.表示方法
__dict__ 对于对象的增删改查操作都可以通过字典的语法进行
类名能做的事:实例化
调用方法 : 要自己传递self参数
调用类中的属性,也就是调用静态属性
__dict__ 对于类中的名字只能看,不能操作
修改属性:a.直接修改
yuki.age = 3
print(yuki.age)
b.通过方法修改属性
def newage(self,n):
self.age = n
yuki = Dog('yuki',2)
yuki.newage(3)
8.2类命名空间与对象、实例的命名空间
类有两种属性:静态属性和动态属性
a.静态属性就是直接在类中定义的变量
b.动态属性就是定义在类中的方法
类中定义的变量,可以通过对象,类名直接调用
class Course:
language = 'Chinese'
def __init__(self,teacher,course_name,period,price):
self.teacher = teacher
self.name = course_name
self.period = period
self.price = price
def func(self):
pass
python = Course('aaaa','python','6 months',666)
linux = Course('bbbb','linux','6 months',666)
print(python.language)
print(linux.language)
print(Course.language)
#Chinese
#Chinese
#Chinese
对于不可变数据类型来说,类变量最好用类名操作
#通过对象对类的不可变变量进行修改,不会改变类中变量的值
python.language = 'English'
print(python.language)
print(linux.language)
print(Course.language)
#English
#Chinese
#Chinese
对于可变数据类型来说,对象名的修改是共享的,重新赋值是独立的
class Course:
language = ['Chinese']
def __init__(self,teacher,course_name,period,price):
self.teacher = teacher
self.name = course_name
self.period = period
self.price = price
def func(self):
pass
python = Course('aaaa','python','6 months',666)
linux = Course('bbbb','linux','6 months',666)
python.language[0] = 'English'
print(python.language)
print(linux.language)
print(Course.language)
'''
['English']
['English']
['English']
'''
8.3面向对象的组合
组合 :一个对象的属性值是另外一个类的对象
from math import pi
class Circle:
def __init__(self,r):
self.r = r
def area(self):
return self.r**2 * pi
def perimeter(self):
return 2*pi*self.r
class Ring:
def __init__(self,outside_r,inside_r):
self.outside_c = Circle(outside_r)
self.inside_c = Circle(inside_r)
def area(self):
return self.outside_c.area() - self.inside_c.area()
def perimeter(self):
return self.outside_c.perimeter()+self.inside_c.perimeter()
ring = Ring(20,10)
print(ring.area())
print(ring.perimeter())