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()
View Code

#多继承
类外部调用方法顺序

 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这边找
View Code

类方法内部调用对象方法

 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
View Code

 

###多态(了解)
不过,在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])
View Code

 

 #######################################
经理和员工差异(用来熟悉知识)

class Employee:
    @property
    def name(self):
        return self.__pname

    @name.setter
    def name(self,val):
        self.__pname = val
employee.py
import employee
class Manager(employee.Employee):
    @property
    def bonus(self):
        return self.__bonus

    @bonus.setter
    def bonus(self,val):
        self.__bonus = val
manager.py
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)
run.py

 



 

 

 



 

posted @ 2018-01-19 18:58  Alos403  阅读(264)  评论(0编辑  收藏  举报