最近仿照memcache的IO机制用libevent库写了一个多线程的socket程序,需要一个测试程序,于是准备用python写一个不过好久没写python了该觉有点手生啊。
首先准备一些类的基础知识:
1,类的的继承:python类个人感觉功能比较单一,不过和C++差不多,只不过形式不一样。
2,类的私有成员:python类没有例如public,private,protected这些成员修饰符,转而替代的是下滑线其中双下划线表示私有(这让我们写C++好头疼啊)。
3,静态成员:python中没有static来表示静态成员。用@staticmethod用来修饰的函数为静态函数,其余的为非静态。静态方法无法访问类的成员变量(不用self引用而用类名引用)和对象的变量(用self引用)
<span style="font-size:14px;">class A:
a = []
def func(self):
A.a.append("c")
if __name__=="__main__":
b = A()
b.func()
c = A()
c.func()
print c.a
</span>
输出为cc
<span style="font-size:14px;">class A:
def __init__(self):
self.a = []
self.a.append('c')
if __name__=="__main__":
b = A()
c = A()
print c.a</span>
输出为c
下面给出一些实例:
<span style="font-size:14px;">import socket
import sys
import os
#############################population is static belongs to class name is common var################################
class test:
name = "zh"
population = 0
def fun(self):
print 'nihao %s' %(self.name)
class test1:
population = 0;
def __init__(self):
test1.population = test1.population + 1
@staticmethod
def statifunction(self):
print "static function"
a = test()
def _fun(self):
self.a.fun()
#####################################################################
class schoolmember:
def __init__(self,name,age,department):
self.name = name;
self.age = age;
self.department = department;
def tell(self):
print 'name is %s, age is %s department is %s' %(self.name,self.age,self.department),
class teacher(schoolmember):
def __init__(self,name,age,department,salary):
schoolmember.__init__(self, name, age, department)
self.salary = salary
def tell(self):
schoolmember.tell(self),
print 'salary is %d' %(self.salary)
class student(schoolmember):
def __init__(self,name,age,depardement,sore):
schoolmember.__init__(self, name, age, department)
self.score = score
def tell(self):
schoolmember.tell(self),
print 'score is %d' %(self.score)
#################################################################################
class Socketclient:
def socketinit(self):
socketcon = socket()
try:
socketcon.connect(("localhost",8000))
except:
print "socket connect error"
else:
print socketcon.recv()
socketcon.close()
class socketserver:
def __init__(self):
self.socketlsiten = 0;
self.acceptfd = 0;
self.addr=()
def socketinit(self):
try:
self.socketlsiten = socket.socket()
except:
print "socket error"
sys.exit(0)
try:
host = socket.gethostname()
self.socketlsiten.bind((host,1234))
except:
print "socket bind incorrect"
sys.exit(0)
try:
self.socketlsiten.listen(3)
except:
print "scoket lsiten error"
sys.exit(0)
else:
print "socket create correct"
return
def socket_accept(self):
while True:
try:
self.acceptfd,self.addr=self.socketlsiten.accept()
except:
print "accept error"
break
else:
self.acceptfd.send("nihao")
self.acceptfd.close()
break
if __name__=="__main__":
'''teacher1 = teacher("zh",3,"shuxue",10)
teacher1.tell()'''
#host = socket.gethostname()
# print gethostbyname(host)
#print gethostbyname_ex(host)
# server = socketserver()
# server.socketinit()
# server.socket_accept()
# print "over"
</span>