内容简介: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
以上所述就是小编给大家介绍的《027class_part1》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。