Python:封装字符串

时间:2013-07-01 16:01:09

标签: python oop encapsulation

我想创建一个类似字符串的对象,它将定义一些基本str类型没有的额外方法。对str类型进行子类化显然不是可行的方法,因此我考虑使用封装策略但无法弄清楚如何在将对象传递给{{1}等其他函数时使对象像字符串一样运行}。

open

2 个答案:

答案 0 :(得分:0)

你需要做任何一次

with open(s.string, 'w') as handle: handle.write('Hello world')

with open(str(s), 'w') as handle: handle.write('Hello world')

答案 1 :(得分:0)

您应该覆盖__getattr____setattr__方法,如下所示:

这将作为普通字符串,除了它有额外的方法from_str,你可以随意添加更多的额外方法。

class Student(object):
    def __init__(self, name):
        # define your internal stuff here, with self.__dict__
        self.__dict__['name'] = name

    def __getattr__(self, attr):
        return self.name.__getattribute__(attr)

    def from_str(self, txt):
        self.name = txt

    def __setattr__(self, attr, value):
        if not attr in self.__dict__:
         return self.name.__setattr__(attr, value)
        else:
          self.__dict__[attr] = value


student = Student('test')
print student.upper()
>>>TEST
student.from_str('foo')
>>> print student.upper()
FOO