'Class Define Object,path:from classPacket.classDef import xxx'
__author__ = 'gitkong'
import functools
# 装饰器,自动打印信息
def _logDecorator(func):
@functools.wraps(func)
def wrapper(self, *args, **kw):
self.printMsg()
return func(self, *args, **kw)
return wrapper
def _logDecoratorMsg(msg = ''):
def decorator(func):
@functools.wraps(func)
def wrapper(self, *args, **kw):
print('Begin', msg, 'name:', self.name,'age:', self.age)
fn = func(self, *args, **kw)
print('End', msg, 'name:', self.name,'age:', self.age)
return fn
return wrapper
return decorator
class Person(object):
# 仅class中使用可以不用外部声明,可以通过.语法访问,如果同文件,class外部要使用,则要声明(上面的装饰器用到)
name = 'Kong'
age = 18
# @_logDecorator
@_logDecoratorMsg('Init Method')
def __init__(self, name = 'Kong', age = 18):
super().__init__()
self.name = name
self.age = age
# Private Func Begin
# @_logDecoratorMsg()
@_logDecorator
def _changeMsg(self, *msg):
if len(msg) > 1:
self.name = msg[1]
if len(msg) > 2:
self.age = msg[2]
# Private Func End
# Public Func Begin
def changeName(self, name):
return self._changeMsg(self, name)
def changeAge(self, age):
return self._changeMsg(self, self.name, age)
def printMsg(self):
print(self, self.name, self.age)
# Public Func End
# Rewrite Func Begin
@_logDecoratorMsg('Setter Method')
def __setattr__(self, key, value):
return super().__setattr__(key, value)
# Rewrite Func End
2、import使用
from classPacket.classDef import Person
person = Person('gitkong', 27)
person.printMsg()
person.changeName('lie')
person.name = 'Dou'
person = Person()
输出:
Begin Init Method name: Kong age: 18
Begin Setter Method name: Kong age: 18
End Setter Method name: gitkong age: 18
Begin Setter Method name: gitkong age: 18
End Setter Method name: gitkong age: 27
End Init Method name: gitkong age: 27
<classPacket.classDef.Person object at 0x109b383a0> gitkong 27
<classPacket.classDef.Person object at 0x109b383a0> gitkong 27
Begin Setter Method name: gitkong age: 27
End Setter Method name: lie age: 27
Begin Setter Method name: lie age: 27
End Setter Method name: Dou age: 27
Begin Init Method name: Kong age: 18
Begin Setter Method name: Kong age: 18
End Setter Method name: Kong age: 18
Begin Setter Method name: Kong age: 18
End Setter Method name: Kong age: 18
End Init Method name: Kong age: 18
<classPacket.classDef.Person object at 0x109b389d0> Kong 18
gitKong
写个简单的例子复习一下语法吧~