027class_part1
因为有基础,我直接简单写了
##定义类,创建对象,调用对象方法,返回值
class person: def speak(self,x): print('love',x) return x + '*********' xia = person() s = xia.speak('theonewholoveme') print(s)
##添加属性,和Java有区别
class B: def func(self,x = '**'): print(self.name,x)
z = B() z.name = 'xia' z.func('21')
##构造方法
def __init__(self): print('123') def __init__(self,name,age): print('3',name,age)
python构造方法只有一个或者没有,和Java不同
###继承
1 class Father: 2 def f(self): 3 print('father') 4 def smoke(self): 5 print('f_吐烟') 6 7 class Son(Father): 8 def s(self): 9 print('son') 10 def smoke(self): 11 super(Son,self).smoke() # super(当前类名,self).父类方法,第一种调用父类方法 12 print('s_吐烟') 13 Father.smoke(self) # 第二种调用父类方法,推荐使用super 14 15 s=Son() 16 s.smoke()
#多继承
类外部调用方法顺序
1 class GF: 2 def a1(self): 3 print('grand.a1') 4 5 class F1: 6 def a(self): 7 print('F1.a') 8 9 class F2(GF): 10 def a(self): 11 print('F2.a') 12 13 class S(F1,F2): 14 pass 15 16 son = S() 17 son.a() # F1.a,那个在前就调用哪个的,这里F1在前面,如果是S(F2,F1),这样就是F2.a了 18 son.a1() # grand.a1,从F1往上找找不到就会从右边F2这边找
类方法内部调用对象方法
1 class BaseRequest: 2 def __init__(self): 3 print('BaseRequest.__init__') 4 5 class RequestHandler(BaseRequest): 6 def __init__(self): 7 print('RequestHandler.__init__') 8 def server_forever(self): 9 print('RequestHandler.server_forever') 10 self.process_request() # self还是Son创建的对象,所以还是从Minx开始找 11 12 def process_request(self): 13 print('RequestHandler.process_request') 14 15 class Minx: 16 def process_request(self): 17 print('Minx.process_request') 18 19 class Son(Minx,RequestHandler): 20 pass 21 22 o = Son() #RequestHandler.__init__ 23 o.server_forever() # RequestHandler.server_forever#Minx.process_request
###多态(了解)
不过,在python里面忽略多态,支持多态,所以我就不写了
###类的成员之字段
普通字段 self.***
静态字段 直接在类里面
class Province: country = '中国' def __init__(self,name): self.name = name guangdong = Province('广东') print(Province.country) # 中国 # 静态字段,在类里面,可以通过对象访问也可以通过类访问 print(guangdong.name) # 广东 # 普通字段,在对象里面
###类的方法
普通方法 1、对象调用;
2、通过类调用普通方法(不使用)
class P: def f(self): print('ffff') obj = P() P.f(obj) # 这样调用,蛮无聊的。不会使用
静态方法:加@staticmethod
class P: @staticmethod def sta(): print('statics') P.sta()
类方法:和静态方法差不多,参数问题,这个不重要(不会使用)
@classmethod def classmd(cls): print(cls) P.classmd()
#类成员之属性
class P: @property def per(self): print('property') return 1 @per.setter def per(self,val): print(val) @per.deleter def per(self): print('deleter') x = P() r = x.per # property, 有类似x.per的就执行 @property下函数 ,需要有返回值 print(r) # 1 x.per = 123 # 自动显示123 有类似 x.per = *** 的就执行 @per.setter 下函数 del x.per # 显示deleter 有类似del x.per 的就执行@per.deleter 下函数
property实现的功能相当于Java的get,.setter相当于实现set,deleter相当于delete
eg:利用属性实现分页
1 #__author:_nbloser 2 #date:2018/1/19 3 4 class Pergination: 5 def __init__(self,current_page): 6 try: 7 p = int(current_page) 8 except: 9 p = 1 10 self.page = p 11 12 @property 13 def start(self): 14 val = (self.page-1)*10 15 return val 16 17 @property 18 def end(self): 19 val = self.page*10 20 return val 21 22 li = [] 23 for i in range(1000): 24 li.append(i) 25 26 while True: 27 p = input('页码:') 28 obj = Pergination(p) 29 30 print(li[obj.start:obj.end])
#######################################
经理和员工差异(用来熟悉知识)
class Employee: @property def name(self): return self.__pname @name.setter def name(self,val): self.__pname = val
import employee class Manager(employee.Employee): @property def bonus(self): return self.__bonus @bonus.setter def bonus(self,val): self.__bonus = val
from employee import Employee from manager import Manager if __name__ == '__main__': emp = Employee() man = Manager() emp.name = 'xxxx' man.name = 'iiii' man.bonus = 10000 print(emp.name,man.name,man.bonus)