day 23 面向对象的命名空间与组合

时间:2023-12-18 15:58:56

创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性

而类有两种属性:静态属性和动态属性

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生日快乐,