封装思想、构造函数===
第1题.问题:两手交换牌

1.定义类(个人理解:指代具体事物的单体,属性指的是类的单体的构成部分,题目中明显看到的有手和牌两个事物,以及交换这个动作,那么我们就知道交换的动作是人制造的,然后手有牌,牌有花色和数字,之所以把人牵扯进来,是因为交换的动作需要人来进行,而动作可以视为人这个类的一个函数,所以需要加入人的类)
1)定义牌类(一张牌分为颜色和数字,所以需要做拼接)
属性:花色、数字(一般赋值为空,或设置变量,不会赋具体数值,具体数值由对象来做)

2)定义手类(这里指的是一只手,而发生交换这个动作必须要人的两只手,不需要创建两个相同的类,所以必然需要创建两个对象)
属性:卡牌

3)定义人类(一个人类有两只手,所以属性中需要分别定义左手和右手用来组成人类的手部)
属性:左手、右手(变量、构造函数)
动作:交换卡牌(函数)

2.创建类和函数

1)创建卡牌类
定义属性:分为花色和数字
class pai: #创建牌类
def init(self): #创建构造函数
self.colors=None #定义牌的花色变量为空
self.nums=None #定义牌的数字变量为空

2)创建手类
定义属性:牌
class hand: #创建手类
def init(self): #定义构造函数
self.pai="" #定义牌变量为空

3)创建人类
定义属性:左手和右手
class Persion: #创建人类
def init(self): #创建构造函数
self.left_hand=None #定义左手变量为空
self.right_hand=None #定义右手变量为空

创建动作:交换
def change(self): #创建函数
c=self.left_hand #将变量c赋值为左手
self.left_hand=self.right_hand #将变量左手赋值为变量右手
self.right_hand=c #将变量c赋值为右手

3.创建对象
1)卡牌对象
第一个牌对象(第一张牌)
p1=pai() #创建牌类对象
p1.colors="黑" #将color赋值为黑
p1.nums="3" #将nums赋值为3

第二个牌对象(第二张牌)
p2=pai() #创建牌类对象
p2.colors="黑" #将color赋值为黑
p2.nums="4" #将nums赋值为4

2)手类对象
第一个手对象(第一只手)
l=hand() #创建手类对象(左手)
l.pai=p1.colors+p1.nums #将牌的变量赋值为牌类的变量花色和数字的拼接(l为对象,pai为类中定义的构造函数变量,l.pai就相当于self.pai,这里是讲类中的变量模板拿出来进行赋值,类里面的self.pai为空值,这里就是通过对象,将其调用进行具体赋值了,这里有两只手,就对类中的变量进行两次赋值,两次对象的赋值都是独立进行的,左手赋值会保持一个变量,右手赋值会再保持一个变量,这也是扩展性的一个体现,不需要更改类里面的模板,只需要通过创建对象就可以不断的扩展

第二个手对象(第二只手)
r=hand() #创建手类对象(右手)
r.pai=p2.colors+p2.nums #将牌的变量赋值为牌类的变量花色和数字的拼接

3)人类对象
d1=Persion() #创建人类对象
d1.right_hand=l #将右手赋值给手类(左手)对象
d1.left_hand=r #将左手赋值给手类(右手)对象
d1.change() #将左右手交换(调用交换函数)
print(d1.left_hand.pai,d1.right_hand.pai) #打印左手和右手的牌