22 练习题:面向对象的命名空间 组合

# 第一大题 : 读程序,标出程序的执行过程,画出内存图解,说明答案和为什么
# 请不要想当然,执行之后检查结果然后再确认和自己的猜想是不是一致
# (1)
class A:
    Country = '中国'     # 静态变量/静态属性 存储在类的命名空间里的
    def __init__(self,name,age,country):  # 绑定方法 存储在类的命名空间里的
        self.name = name
        self.age = age
    def func1(self):
        print(self)

a = A('alex',83,'印度')
b = A('wusir',74,'泰国')
A.Country = '英国'
a.Country = '日本'
print(a.Country)
print(b.Country)
print(A.Country)
# '日本'
# '日本'
# '英国'



# (2)
class A:
    Country = ['中国']     # 静态变量/静态属性 存储在类的命名空间里的
    def __init__(self,name,age,country):  # 绑定方法 存储在类的命名空间里的
        self.name = name
        self.age = age
    def func1(self):
        print(self)

a = A('alex',83,'印度')
b = A('wusir',74,'泰国')
a.Country[0] = '日本'
print(a.Country)
print(b.Country)
print(A.Country)
# ['日本']
# ['日本']
# ['日本']



# (3)
class A:
    Country = '中国'     # 静态变量/静态属性 存储在类的命名空间里的
    def __init__(self,name,age,country):  # 绑定方法 存储在类的命名空间里的
        self.name = name
        self.age = age
        self.Country = country
    def func1(self):
        print(self)

a = A('alex',83,'印度')
b = A('wusir',74,'泰国')
A.Country = '英国'
a.Country = '日本'
print(a.Country)
print(b.Country)
print(A.Country)
# '日本'
# '泰国'
# '英国'



# (4)
class A:
    Country = '中国'     # 静态变量/静态属性 存储在类的命名空间里的
    def __init__(self,name,age,country):  # 绑定方法 存储在类的命名空间里的
        self.name = name
        self.age = age
    def Country(self):
        return self.Country

a = A('alex',83,'印度')
b = A('wusir',74,'泰国')
print(a.Country)
print(a.Country())
# <bound method A.Country of <__main__.A object at 0x000002A5FA79DDA0>>
# <bound method A.Country of <__main__.A object at 0x000002A5FA79DDA0>>



# 第二大题:基于圆形类实现一个圆环类,要求接收参数 外圆半径和内圆半径
# 完成方法 :计算环形面积和环形周长(公式自己上网查)
# 要求,借助组合,要求组合圆形类的对象完成需求
from math import pi
class Circle:
    def __init__(self, radius):
        self.radius = radius
    def Area(self):
        return pi * self.radius ** 2
    def Perimeter(self):
        return pi * 2 * self.radius

class Annulus:
    def __init__(self, wrapper_radius, inner_radius):
        wrapper_radius, inner_radius = (wrapper_radius, inner_radius) \
            if wrapper_radius > inner_radius else (inner_radius, wrapper_radius)
        self.wrapper = Circle(wrapper_radius)
        self.inner = Circle(inner_radius)
    def A_Perimeter(self):
        return self.wrapper.Perimeter() + self.inner.Perimeter()
    def A_Area(self):
        return self.wrapper.Area() - self.inner.Area()


annulus1 = Annulus(5, 10)
print(annulus1.A_Perimeter())  # 94.24777960769379
print(annulus1.A_Area())  # 235.61944901923448
posted @ 2020-07-20 19:49  Raigor  阅读(131)  评论(0编辑  收藏  举报