Discuss / Python / homework

homework

Topic source

gitKong

#1 Created at ... [Delete] [Delete and Lock User]

写个简单的例子复习一下语法吧~

1、新建classDef.py文件
'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


  • 1

Reply