Python从新手到大师——09:python函数参数私有化
2018-08-24 本文已影响0人
远航天下
代码一
#! /usr/bin/env python
"""
@Time : 2018/8/23 15:03
@Author : Damao
@Site : Life is short. I use python.
@File : test1.py
@Software : PyCharm
"""
"""访问(读取和重新赋值)类私有属性的安全方法"""
class Person(object):
def __init__(self,name,age):
self._name = name
self._age = age
# 访问器 - getter方法
@property
def name(self):
return self._name
# 访问器 - getter方法
@property
def age(self):
return self._age
# 修改器 - setter方法
@age.setter
def age(self,age):
self._age = age
# 修改器 - setter方法
@name.setter
def name(self,name):
self._name = name
def play(self):
if self._age <= 20:
print("{a}正在玩耍!".format(a=self._name))
else:
print("{a}正在学习!".format(a=self._name))
if __name__ == '__main__':
p = Person("大毛",98)
p.play()
print(p.age)
p.age = 1
p.name = "dsf"
print(p.name)
p.play()
代码二
#! /usr/bin/env python
"""
@Time : 2018/8/23 15:30
@Author : Damao
@Site : Life is short. I use python.
@File : test2.py
@Software : PyCharm
"""
"""使用__slots__魔法方法限定类的某些属性(只作用于当前类,对子类不起作用)"""
class Person(object):
# 限定Person对象只能绑定_name, _age和_gender属性
__slots__ = ('_name','_age','_gender','_hh','_jjj')
def __init__(self,name,age):
self._name = name
self._age = age
# 访问器 - getter方法
@property
def name(self):
return self._name
# 访问器 - getter方法
@property
def age(self):
return self._age
# 修改器 - setter方法
@age.setter
def age(self,age):
self._age = age
# 修改器 - setter方法
@name.setter
def name(self,name):
self._name = name
def play(self):
if self._age <= 20:
print("{a}正在玩耍!".format(a=self._name))
else:
print("{a}正在学习!".format(a=self._name))
if __name__ == '__main__':
p = Person("bdby",1)
p.play()
p._gender = 'male'
p._hh = 1
p._jjj = 100
# p._oo = 77 # 报错:AttributeError: 'Person' object has no attribute '_oo'
print(p._gender)
print(p._hh)
print(p._jjj)
代码三
#! /usr/bin/env python
"""
@Time : 2018/8/23 15:44
@Author : Damao
@Site : Life is short. I use python.
@File : test3.py
@Software : PyCharm
"""
"""静态方法"""
from math import sqrt
class Triangle(object):
def __init__(self,a,b,c):
self._a = a
self._b = b
self._c = c
@staticmethod # is_triangle为静态方法,属于三角形类,而不属于三角形对象
def is_triangle(a,b,c):
is_t = a + b > c and b + c > a and a + c > b
return is_t
def perimeter(self):
p = self._a + self._b + self._c
return p
def area(self):
half = self.perimeter() / 2
t_area = sqrt(half * (half - self._a) * (half - self._b) * (half - self._c))
return t_area
if __name__ == '__main__':
if Triangle.is_triangle(3,4,5):
t = Triangle(3,4,5,)
print("周长是:{a}".format(a=t.perimeter()))
print("面积是:",t.area())
else:
print("无法构成三角形!")
代码四
#! /usr/bin/env python
"""
@Time : 2018/8/23 16:10
@Author : Damao
@Site : Life is short. I use python.
@File : test4.py
@Software : PyCharm
"""
"""类方法"""
from time import time, localtime, sleep
import os
class Clock(object):
"""数字时钟"""
def __init__(self, hour=0, minute=0, second=0):
self._hour = hour
self._minute = minute
self._second = second
@classmethod
def now(cls):
now_time = localtime(time())
return cls(now_time.tm_hour,now_time.tm_min,now_time.tm_sec)
def run(self):
"""走字"""
self._second += 1
if self._second == 60:
self._second = 0
self._minute += 1
if self._minute == 60:
self._minute = 0
self._hour += 1
if self._hour == 24:
self._hour = 0
def show(self):
"""显示时间"""
return '%02d:%02d:%02d' % \
(self._hour, self._minute, self._second)
if __name__ == '__main__':
clock = Clock.now()
while True:
os.system("cls")
print(clock.show())
sleep(1)
clock.run()
代码五
#! /usr/bin/env python
"""
@Time : 2018/8/23 16:33
@Author : Damao
@Site : Life is short. I use python.
@File : test5.py
@Software : PyCharm
"""
"""类的继承"""
class Person(object):
"""人"""
def __init__(self, name, age):
self._name = name
self._age = age
@property
def name(self):
return self._name
@property
def age(self):
return self._age
@age.setter
def age(self, age):
self._age = age
def play(self):
print('%s正在愉快的玩耍.' % self._name)
def watch_av(self):
if self._age >= 18:
print('%s正在观看爱情动作片.' % self._name)
else:
print('%s只能观看《熊出没》.' % self._name)
class Student(Person):
"""学生"""
def __init__(self, name, age, grade):
super().__init__(name, age)
self._grade = grade
@property
def grade(self):
return self._grade
@grade.setter
def grade(self, grade):
self._grade = grade
def study(self, course):
print('%s的%s正在学习%s.' % (self._grade, self._name, course))
class Teacher(Person):
"""老师"""
def __init__(self, name, age, title):
super().__init__(name, age)
self._title = title
@property
def title(self):
return self._title
@title.setter
def title(self, title):
self._title = title
def teach(self, course):
print('%s%s正在讲%s.' % (self._name, self._title, course))
if __name__ == '__main__':
stu = Student('王大锤', 15, '初三')
stu.study('数学')
stu.watch_av()
t = Teacher('大毛', 38, '老叫兽')
t.teach('Python程序设计')
t.watch_av()
代码六
#! /usr/bin/env python
"""
@Time : 2018/8/23 16:38
@Author : Damao
@Site : Life is short. I use python.
@File : test6.py
@Software : PyCharm
"""
"""类的多态(同样的方法做了不同的事情)"""
from abc import ABCMeta, abstractmethod
class Pet(object, metaclass=ABCMeta):
"""宠物"""
def __init__(self, nickname):
self._nickname = nickname
@abstractmethod
def make_voice(self):
"""发出声音"""
pass
class Dog(Pet):
"""狗"""
def make_voice(self):
print('%s: 汪汪汪...' % self._nickname)
class Cat(Pet):
"""猫"""
def make_voice(self):
print('%s: 喵...喵...' % self._nickname)
if __name__ == '__main__':
pets = [Dog('旺财'), Cat('凯蒂'), Dog('大黄')]
for pet in pets:
pet.make_voice()
代码七
#! /usr/bin/env python
"""
@Time : 2018/8/24 10:37
@Author : Damao
@Site : Life is short. I use python.
@File : test7.py
@Software : PyCharm
"""
from random import randrange
import time
"""
目标:玩扑克游戏
设计思路:一张牌;一副牌;4个玩家
"""
class OneCard(object):
def __init__(self,colour,size):
self._colour = colour
self._size = size
@property
def colour(self):
return self._colour
@property
def size(self):
return self._size
def __str__(self): # __str__打印就是reture这个里面的数据
all_colour = ('♠', '♥', '♣', '♦')
if self._size == 1:
size_str = 'A'
elif self._size == 11:
size_str = 'J'
elif self._size == 12:
size_str = 'Q'
elif self._size == 13:
size_str = 'K'
else:
size_str = self._size
return "{a}{b}".format(a=all_colour[self._colour],b=size_str)
class Poker(object):
def __init__(self):
self._cards = []
self._current = 0
for col in range(4):
for siz in range(1,14):
card = OneCard(colour=col,size=siz)
self._cards.append(card)
@property
def cards(self):
return self._cards
def shuffle_cards(self):
"""
洗牌
:return:
"""
self._current = 0
cards_len = len(self._cards)
for i in range(cards_len):
random_i = randrange(cards_len)
self._cards[i],self._cards[random_i] = self._cards[random_i],self._cards[i]
@property
def send_card(self):
"""
发牌
:return:
"""
card = self._cards[self._current]
self._current += 1
return card
@property
def is_any_card(self):
"""
还有没有剩余牌
:return:
"""
return self._current < len(self._cards)
class Palyer(object):
def __init__(self,name):
"""
:param name: 玩家姓名
:param name_has_card: 玩家手里卡片
"""
self._name = name
self._name_has_card = []
@property
def name(self):
return self._name
@property
def name_has_card(self):
return self._name_has_card
def get_card(self,card):
"""
玩家抓牌
:param card:
:return:
"""
self._name_has_card.append(card)
def arrangment_cards(self,card_key):
"""
玩家整理手上牌:排序
:return:
"""
self._name_has_card.sort(key=card_key)
def get_key(card):
return (card.colour, card.size)
def main():
p = Poker()
p.shuffle_cards()
players = [Palyer('乔峰'), Palyer('段誉'), Palyer('虚竹'), Palyer('正淳')]
for _ in range(13):
for player in players:
player.get_card(p.send_card)
for player in players:
print(player.name + ':', end=' ')
player.arrangment_cards(get_key)
for card in player.name_has_card:
print(card, end=' ')
print()
if __name__ == '__main__':
for _ in range(10):
time.sleep(1)
main()
print()