Python定制类

1.__str__

class Student(object):

    def __init__(self, name):
        self._name = name

m = Student("michael")
print m
<__main__.Student object at 0x0000000003280EF0>

为了使print类的结果格式更加方便阅读

重写__str__(self)

class Student(object):

    def __init__(self, name):
        self._name = name

    def __str__(self):
        return "Student Name is %s !"% self._name

m = Student("michael")
print m
Student Name is michael !

__repr__类似与__str__,不同的__repr__主要运用与开发者交互方面

2.__iter__

将类变为可迭代的类型

class Fib(object):
    def __init__(self):
        self.a = 0
        self.b = 1

    def __iter__(self):
        return self

    def next(self):
        self.a, self.b = self.b, self.a + self.b
        if self.a > 100:
            raise StopIteration()
        return self.a

for n in Fib():
    print n

3.__getitem__

用于迭代的时候,能用数组下标访问其中的变量

class Fib(object):
    def __init__(self):
        self.a = 0
        self.b = 1

    def __iter__(self):
        return self

    def next(self):
        self.a, self.b = self.b, self.a + self.b
        if self.a > 100:
            raise StopIteration()
        return self.a

    def __getitem__(self, item):
        for i in range(item):
            self.a, self.b = self.b, self.a + self.b
        return self.a

print Fib()[11]

4.__getattr__

直接上例子:

class Person(object):
    def __init__(self):
        self.name = "Michael"

    def __getattr__(self, item):
        if item == "age":
            self.age = 22
            return self.age

m = Person()
print m.__getattr__("age")

附上一个动态生成路径的代码

class Clain(object):
    def __init__(self, path=""):
        self._path = path

    def __getattr__(self, item):
        return Clain("%s/%s"%(self._path, item))

    def __str__(self):
        return self._path

print Clain().usr.bin.env.python
/usr/bin/env/python

5.__call__

直接调用实例

上个例子:

class Person(object):
    def __init__(self):
        self.name = "Michael"

    def __call__(self, *args, **kwargs):
        print "My name is %s" % self.name

m = Person()
m()
My name is Michael

附:__getattr__ 和 __call__ 联合调用

class Clain(object):
    def __init__(self, path=""):
        self._path = path

    def __getattr__(self, item):
        return Clain("%s/%s"%(self._path, item))

    def __str__(self):
        return self._path

    def __call__(self, *args, **kwargs):
        for i in args:
            self._path = "%s/%s" % (self._path, i)
        return Clain(self._path)

print Clain().usr("Michael").bin.env.python
/usr/Michael/bin/env/python
时间: 2024-10-20 20:04:05

Python定制类的相关文章

python 定制类

看到类似__slots__这种形如__xxx__的变量或者函数名就要注意,这些在Python中是有特殊用途的. __slots__我们已经知道怎么用了,__len__()方法我们也知道是为了能让class作用于len()函数. 除此之外,Python的class中还有许多这样有特殊用途的函数,可以帮助我们定制类. __str__ 我们先定义一个Student类,打印一个实例: >>> class Student(object): ... def __init__(self, name):

Python 定制类 特殊方法

1.特殊方法 定义在class中 不需要直接调用,python的某些函数或操作符会自动的调用对应的特殊方法. 如定义了person类,使用print p 语句打印person类的实例时,就调用了特殊方法__str__() 此时就需要在person类中实现这个方法. 使用特殊方法时注意: 只需要编写用到的特殊方法 有关联性的特殊方法都必须实现(如__getattr__,__setattr__,delattr__) 2.python中 __str__和__repr__ __str__()用于显示给用

python定制类(以Fib类为例)

class Fib(object): def __init__(self): self.a, self.b = 0, 1 def __iter__(self): return self def __next__(self): #如果一个类想被用于for ... in循环,类似list或tuple那样,就必须实现一个__iter__()方法,该方法返回一个迭代对象, # 然后,Python的for循环就会不断调用该迭代对象的__next__()方法拿到循环的下一个值,直到遇到StopIterati

一个关于python定制类的例子

class Time(object): def __init__(self, hr, min): self.hr = hr self.min = min def __str__(self): return '%d:%d' %(self.hr, self.min) __repr__ = __str__ # 重载加法 def __add__(self, other): m = self.min + other.min h = self.hr + other.hr if m>=60: m -= 60

Python学习之定制类

本文和大家分享的主要是 python开发中定制类的相关内容,一起来看看吧,希望对大家学习和使用这部分内容有所帮助. 1. python中什么是特殊方法 任何数据类型的实例都有一个特殊方法:  __str__() ·  用于 print 的  __str__ ·  用于 len 的  __len__ ·  用于 cmp 的  __cmp__ ·  特殊方法定义在 class 中 ·  不需要直接调用 · Python 的某些函数或操作符会调用对应的特殊方法 file:///C:\Users\wlc

python中的定制类(转载)

body { font-family: 微软雅黑,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif; font-size: 10.5pt; line-height: 1.5; } html, body { } h1 { font-size:1.5em; font-weight:bold; } h2 { font-size:1.4em; font-weight:bold; } h3 { fon

python学习第十七天 --定制类

何为定制类? Python的class允许定义许多特殊方法,可以让我们非常方便地生成特定的类.在类中应用或者重写python的特殊方法,得到的类,就是定制类. 大家都知道print的用法.见下面例子 >>> lst = [2,3,4] >>> print lst [2, 3, 4] >>> class Animal(object): pass >>> a = Animal() >>> print a <__ma

Python 面向对象高级编程——定制类

1.1   定制类 1.1.1   __str__ >>> class Student(object): ...    def __init__(self, name): ...        self.name = name ... >>> s = Student('daidai') >>> s.name 'daidai' >>> Student('daidai').name 'daidai' >>> print(

python学习——定制类

看到类似__slots__这种形如__xxx__的变量或者函数名就要注意,这些在Python中是有特殊用途的. __slots__我们已经知道怎么用了,__len__()方法我们也知道是为了能让class作用于len()函数. 除此之外,Python的class中还有许多这样有特殊用途的函数,可以帮助我们定制类. __str__ 我们先定义一个Student类,打印一个实例: >>> class Student(object): ... def __init__(self, name):