python中的类
评论(0) 浏览量(7303)

# -*- coding: cp936 -*-
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)
        self.__hello()

    def __hello(self):
        print("hello")

foo = Person()
bar = Person()
foo.setName("zhangsan")
bar.setName("lisi")
foo.greet()
bar.greet()
print(foo.name)
bar.name = "wangwu"
bar.greet()
#print(bar.__hello())#__方法只有内部可以访问

#内部方法setattr和getattr
setattr(bar,"name","setName")
print("set and get",getattr(bar,"name"))


#继承,Python支持多继承
class Student(Person):
    def study(self):
        print("%s study..." % self.name)
st1 = Student()
st1.setName("xiaoming")
st1.greet()
st1.study()

#查看是否继承,是返回True,不是返回False
if issubclass(Student,Person):
    print("True")

#查看继承关系
#>>> Person.__bases__
#()
#>>> Student.__bases__
#(<class __main__.Person at 0x012281B8>,)
   
#isinstance(x,y)可以检查x是否属于y的实例

#抛出异常
b,a=2,1#将a改成0测试
if a==0:
    raise Exception("除数为0")
else:
    print(b/a)

#捕获异常
b,a=2,1#将a改成0测试
try:
    c=b/a
except ZeroDivisionError:
    print("除数为0")
finally:
    print("除法执行完毕")

#类似java的构造方法
class Test1:
    def __init__(self):#相当于构造方法
        self.iii =42
Init = Test1()#__init__方法已经执行
print(Init.iii)

class Test2:
    def __init__(self,value=42):#相当于构造方法
        self.iii =value
Init = Test2("change !!!")#__init__方法已经执行,并执行赋值
print(Init.iii)
#Python也可以覆盖方法
#类名__init__(self)可以调用父类的构造函数
#super调用父类方法

#__len__返回各种类型的数量,如:序列长度,Map键值数
str = [1,2,3,4]
print(str.__len__())

#property绑定变量
class Rectangle:
    def __init__(self):
        self.width=0
        self.height=0
    def setSize(self,size):
        self.width,self.height=size
    def getSize(self):
        return self.width,self.height
    size = property(getSize,setSize)
#很明显这里size代替了get和set方法
r = Rectangle()
r.width=10
r.height=5
print(r.size)
r.size=25,30
print(r.size)

#迭代器,还有__iter__
it =iter([1,2,3])
for i in range(len([1,2,3])):
    print(it.next())

 

运行结果:
Hello,world! I'm zhangsan
hello
Hello,world! I'm lisi
hello
zhangsan
Hello,world! I'm wangwu
hello
('set and get', 'setName')
Hello,world! I'm xiaoming
hello
xiaoming study...
True
2
除法执行完毕
42
change !!!
4
(10, 5)
(25, 30)
1
2
3

没有登录不能评论