作者:追风剑情 发布于:2017-12-15 15:59 分类:Python

示例

# -*- coding: cp936 -*-
#类型检查
x = (1,2,3)
print isinstance(x, tuple) #是否为元组类型
print isinstance(x, list) #是否为列表类型
print isinstance(x, str) #是否为字符串类型
print isinstance(x, dict) #是不为字典类型
print isinstance(x, int) #是否为整型
print isinstance(x, float) #是否为浮点型

#count函数: 统计字符出现的个数
print 'abca'.count('a')
print [1,2,'a'].count('a')

from random import choice
x = choice(['Hello,world!', [1,2,'e',4]]) #choice方法:随机从列表中选择1项
print x.count('e');

#定义一个类
#类中定义的变量在Python中称为特性
__metaclass__ = type # 确定使用新式类

class Person:
    
    def setName(self, name):
        self.name = name

    def getName(self):
        return self.name

    def greet(self):
        print "Hello, world! I'm %s." % self.name

print '调用类'
foo = Person()
bar = Person()
foo.setName('Luke Skywalker')
bar.setName('Anakin Skywalker')
foo.greet()
bar.greet()
#或者这样调用
Person.greet(foo)
Person.greet(bar)
print '访问特性'
print foo.name
bar.name = 'Yoda'
bar.greet()

print '将特性绑定到普通函数上'
class Class:
    def method(self):
        print 'I have a self!'

def function():
    print "I don't'..."

instance = Class()
instance.method()
instance.method = function
instance.method()

class Bird:
    song = 'Squaawk!'
    def sing(self):
        print self.song

bird = Bird()
bird.sing()
birdsong = bird.sing
birdsong()

print '特性私有化(外部不能访问)'
#在它的名字前面加上双下划线即可
#前面带星号的名字都不会被带星号的import语句(from module import *)导入
class Secretive:

    def __inaccessible(self):#外部访问此方法会报错
        print "Bet you can't see me..."

    def accessible(self):
        print "The secret message is:"
        self.__inaccessible()


s = Secretive()
#s.__inaccessible() #引发报错
s.accessible()

class C:
    print 'Class C being defined...'#类的作用域内也可以写普通代码语句


print '类的命名空间'
class MemberCounter:
    members = 0 #此变量的作用域为类
    def init(self):
        MemberCounter.members += 1 #类变量加1


m1 = MemberCounter()
m1.init()
print MemberCounter.members
m2 = MemberCounter()
m2.init()
print MemberCounter.members
print m1.members
print m2.members

print '重绑实例特性' #只影响单个实例
m1.members = 'Two'
print m1.members
print m2.members

print '指定超类'
class Filter:
    def init(self):
        self.blocked = []
    def filter(self, sequence):
        return [x for x in sequence if x not in self.blocked]

class SPAMFilter(Filter): #Filter是SPAMFilter的父类
    def init(self): #重写Filter超类中的init方法
        self.blocked = ['SPAM']

s = SPAMFilter()
s.init()
print s.filter(['SPAM', 'SPAM', 'eggs', 'bacon'])


#判断一个类是否为另一个类的子类
print 'issubclass函数'
print issubclass(SPAMFilter, Filter)
print issubclass(Filter, SPAMFilter)

print '查看已知类的基类'
print SPAMFilter.__bases__
print Filter.__bases__

#检查一个对象是否为一个类的实例
print 'isinstance函数'
s = SPAMFilter()
print isinstance(s, SPAMFilter)
print isinstance(s, Filter)
print isinstance(s, str)

print '查看已知对象所属类'
print s.__class__
#如果使用_metaclass__=type或从object继承的方式来定义新式类,那么可以使用type(s)
#查看实例所属的类。
print type(s)

print '多个超类'
class Calculator:
    def calculate(self, expression):
        self.value = eval(expression)

class Talker:
    def talk(self):
        print 'Hi, my value is', self.value

#注意:先继承的类会覆盖后继承类的同名方法
#如果Calculator类中也有talk方法,Talker中的talk方法会被覆盖。
class TalkingCalculator(Calculator, Talker):#多重继承
    pass #这个类什么也不做

tc = TalkingCalculator()
tc.calculate('1+2*3')
tc.talk()

print '检查特性是否存在'
print hasattr(tc, 'talk')
print hasattr(tc, 'fnord')

print '检查特性是否可调用'
#callable函数在Python3.0中已不再可用,可以使用hasattr(x.'__call__')来代替。
print callable(getattr(tc, 'talk', None))
print callable(getattr(tc, 'fnord', None))

print '设置对象特性'
setattr(tc, 'name', 'Mr.Gumby')
print tc.name

print '查看对象内所有存储的值'
print tc.__dict__

#inspect模块可查看对象由什么组成(编写对象浏览器编程有用)

运行测试

11111.png

标签: Python

« 异常 | 函数»
Powered by emlog  蜀ICP备18021003号   sitemap

川公网安备 51019002001593号