day 23 面向对象的命名空间与组合
创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性
而类有两种属性:静态属性和动态属性
1. 静态属性就是直接在类中定义的变量
2.动态属性就是定义在类中的方法.
其中类的数据属性是共享给所有对象的.
>>>id(egg.role) 4341594072 >>>id(Person.role) 4341594072
类的动态属性是绑定到所有的对象的。
>>>egg.attack <bound method Person.attack of <__main__.Person object at 0x101285860>> >>>Person.attack <function Person.attack at 0x10127abf8>
def 类名:
#__init__ 内置 初始化方法
def __init__(self):
self.name ='alex'
#静态属性 --变量
静态属性 =‘中国’ #是直接可以用类名.属性名调用的.
#动态属性--方法(函数)
def attack(self):pass
def bite (self):pass
实例化 创造对象 执行init方法
对象 = 类名()
print(对象.__dict__)
软件重用的重要方式除了继承之外还有另外一种方式,即:组合
组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合
求环的面积
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,outer,inner):
self.outer =Circle(outer)#=
self.inner =Circle(inner)
def area(self):
return self.outer.area() -self.inner.area()
def perimeter(self):
return self.outer.perimeter() +self.inner.perimeter()
r = Ring(10,3)
print(r.area())
print(r.perimeter())
老师与生日的例题
class Brithday:
def __init__(self,year,month,day):
self.year = year
self.month =month
self.day =day
class Teacher:
def __init__(self,name,sex,course,birth):
self.name=name
self.sex =sex
self.course =course
self.birth =shengri
shengri = Brithday(1993,3,6)
laoshi = Teacher("alex",'male',"python",shengri)
print(shengri)
import time
if shengri.month== time.localtime().tm_mon and shengri.day == time.localtime().tm_mday :
print("%s生日快乐," %(laoshi.name))
print(time.localtime().tm_year - shengri.year )
输出结果:
<__main__.Brithday object at 0x020F9930>
alex生日快乐,
25