'''
面向对象编程
类
继承:多继承
类中所有的__开头的方法都是内置的来自于父类
对象
创建对象和调用函数一样
方法
类方法
对象方法
构造方法
静态方法
'''
#装饰 装饰器其实就是一个以函数作为参数并返回一个替换函数的可执行函数。
#这一篇博客对装饰解释的很好,如果不是很明白的话,可以考虑看下 http://python.jobbole.com/85056/
import types
def shucai(n):
print("蔬菜:7")
if type(n) == types.FunctionType:
return n()+7
return n + 7
def yangrou(n):
print("羊肉:38")
if type(n) == types.FunctionType:
return n()+38
return n+38
@shucai #类似注解的感觉
@yangrou
def mala():
print("麻辣:15")
return 15
print(mala)
#-----class python:类继承class per(a,b): 可以多继承,不支持实现,因为没有接口存在,都是类
#-----class java:类继承class per extends a{}
class per():
__name=None#私有化filed字段 (java中叫属性) python中以__修饰即可,java中 private String name
#建构造方法
def __init__(self,name):
self.__name=name
#python 中 java中
# def show(self): 可以修改 public void show(this){} 默认this隐藏,不可写
#python中的self即java中的this
def show(self):
print("名字为:"+self.__name)
p=per("li")
p.show()
# print(p.__name)执行这行代码会报错,因为私有化字段不可被调用
class ps :
#python中不可存在多个构造函数
def __init__(self,fname,lname):
self.__first_name=fname
self.__last_name=lname
@property # @property 可以将python定义的函数“当做”属性访问,从而提供更加友好访问方式,但是有时候setter/getter也是需要的
#将zh()方法转为zh属性,不然show方法中print zh()方法
def zh(self):
return self.__first_name+'*'+self.__last_name
@zh.setter
def zh(self,zh):
self.__first_name=zh[:zh.index("+")]
self.__last_name=zh[zh.index("+")+1:]
def show(self,s):
print(self.zh,s) #print(propterty(zh),s)
#ps.zh="wang+wu"通过@zh.setter调用def zh(self,zh)方法,该方法给self.__first_name,self.__last_name属性赋值
#使用show方法 调用 def zh(self)方法,该方法将上述的self.__first_name,self.__last_name以*拼接起来
#通过 @property 将zh()方法转为zh属性
ps=ps("zs","ls")
ps.show("heh")
ps.zh="wang+wu"
ps.show("hah")