from math import pi
"""
1.建立一個(gè)汽車類Auto,包括輪胎個(gè)數(shù),汽車顏色,車身重量,速度等屬性,
并通過(guò)不同的構(gòu)造方法創(chuàng)建實(shí)例。至少要求 汽車能夠加速 減速 停車。
再定義一個(gè)小汽車類CarAuto 繼承Auto 并添加空調(diào)、CD屬性,
并且重新實(shí)現(xiàn)方法覆蓋加速、減速的方法
"""
class Auto:
def __init__(self, color='白色', weight=50, speed=0):
# color='紅色', weight=100, speed=10
self.tyre_count = 4
self.color = color
self.weight = weight
self.speed = speed
self.__max_speed = 300
def speed_up(self, value):
"""加速"""
new_speed = self.speed + value
if new_speed > self.__max_speed:
self.speed = self.__max_speed
else:
self.speed = new_speed
def speed_down(self, value):
"""減速"""
new_speed = self.speed - value
if new_speed < 0:
self.speed = 0
else:
self.speed = new_speed
def stop(self):
"""停車"""
self.speed = 0
class CarAuto(Auto):
def __init__(self, color='', weight=100, speed=10):
# color='紅色', weight=100, speed=10
super().__init__(color, weight, speed) # super().__init__('紅色', 100, 10)
self.CD = ''
self.air_conditioner = '格力'
c1 = CarAuto('紅色')
print(c1.__dict__)
"""
3.創(chuàng)建一個(gè)動(dòng)物類,擁有屬性:性別、年齡、顏色、類型 ,
要求打印這個(gè)類的對(duì)象的時(shí)候以'/XXX的對(duì)象: 性別-? 年齡-? 顏色-? 類型-?/' 的形式來(lái)打印
"""
print('===================第三題===================')
class Animal:
def init(self, gender='公', age=1, color='黑色', type='爬行'):
self.gender = gender
self.age = age
self.color = color
self.type = type
def __repr__(self):
return '/%s的對(duì)象: 性別-%s 年齡-%d 顏色-%s 類型-%s/' % \
(self.__class__.__name__, self.gender, self.age, self.color, self.type)
class Dog(Animal):
pass
an1 = Animal()
print(an1)
dog1 = Dog()
print(dog1)
"""
4.寫(xiě)一個(gè)圓類, 擁有屬性半徑、面積和周長(zhǎng);要求獲取面積和周長(zhǎng)的時(shí)候的時(shí)候可以根據(jù)半徑的值把對(duì)應(yīng)的值取到。
但是給面積和周長(zhǎng)賦值的時(shí)候,程序直接崩潰,并且提示改屬性不能賦值
"""
print('===================第三題===================')
class ReadOnlyError(Exception):
def str(self):
return 'Modify the read-only property'
class Circle:
def init(self, r):
self.r = r
self._perimeter = 0
self._area = 0
# perimeter
@property
def perimeter(self):
return self.r*pi*2
@perimeter.setter
def perimeter(self, value):
raise ReadOnlyError
# area
@property
def area(self):
return pi*self.r**2
@area.setter
def area(self, value):
raise ReadOnlyError
c1 = Circle(10)
print(c1.area, c1.perimeter)
c1.r = 3
print(c1.area, c1.perimeter)