python第八天

看来北方之前表现的太中二了,上一篇阅读量才只有1,唉,其实这两个礼拜特别忙,所以学习进度相比之前缓慢很多,平均一周才能学习人家一周的东西(以前只需要3天就能学人家一周的东西,谁让这个破机房没事就迁移,迁移完了还给北方出事,出事了居然还要北方亲自解决,真是B了狗了),其实第八天没作业,我是看完下一篇有了新作业才顺道把这篇补上,这篇也没什么好写的,还是类,对,就是类,类这个东西我现在根本写不出来什么高大上的东西,只能记录一下它的一些基本特征啊什么的

面向对象的三大特性:

封装:就是类内的函数,这里称之为对象~~~

继承:类可以继承其他类的功能,当然有继承顺序(3.5的继承顺序),取2个最具有代表性的

多态:在python没有什么用,大体意思就是类在传递参数的时候其他语言是需要指定该参数类型的,比如参数A必须是int,B是str,这样的好处就是其他人使用时可以很快速确定这个类的每个参数的类型,知道类型后我们就可以知道相对应方法了嘛,就可以快速的对数据进行处理操作,但是Python中是没有这个要求的。补充:继承后是可以使用父类的数据类型的

 1 python:
 2 def func(arg):
 3     print(arg)
 4 
 5 func(1)         #不会有问题
 6 func('ace')     #不会有问题
 7 func([1,2,3])   #不会有问题
 8 
 9 
10 c# java
11 def func(int arg):
12     print(arg)
13 
14 func(1)         #不会有问题
15 func('ace')     #出错
16 func([1,2,3])   #出错
 1 class A:
 2     pass
 3 
 4 
 5 class B(A):
 6     pass
 7 
 8 
 9 class C(A):
10     pass
11 
12 def func(A arg):
13     print(arg)
14 
15 obj = A()
16 obj = B()
17 obj = C()
18 
19 func(obj)           #都是可以的

 类的成员:

静态字段(类跟对象都可以调用,但是最好用类)

普通字段(对象调用)

 1 #!/usr/bin/env python
 2 class A:
 3     name = 'ACE'
 4 
 5     def __init__(self, age):
 6         self.age = age
 7 
 8 obj = A(22)
 9 print(A.name)           #类访问静态字段
10 print(obj.name)         #对象访问静态字段(一般不用)
11 print(obj.age)          #对象访问普通字段

1 C:UsersAdministratorAppDataLocalProgramsPythonPython35python.exe C:/Users/Administrator/PycharmProjects/ACE/study8/s6.py
2 ACE
3 ACE
4 22
5 
6 Process finished with exit code 0

睡了一觉,好舒服哦~~~,要注意休息,午睡还是很舒服的~~~

普通方法(对象调用,方法属于类)

静态方法(类调用,方法属于类)(功能就是函数,但是是为了表示此方法与此类是相关的)

类方法(cls,类调用,方法属于类)

 1 #!/usr/bin/env python
 2 class A:
 3     def __init__(self, name):
 4         self.name = name
 5 
 6     def show(self):                          #普通方法,就是平时最常用常见的
 7         print(self.name)
 8 
 9     @staticmethod                            #静态方法,可以用类直接调用
10     def f1():
11         print('gg')
12 
13     @classmethod                            #类方法,自动传递cls
14     def f2(cls):
15         print(cls)
16 
17 A.f1()
18 obj = A('bfmq')
19 obj.show()
20 A.f2()
1 C:UsersAdministratorAppDataLocalProgramsPythonPython35python.exe C:/Users/Administrator/PycharmProjects/ACE/study8/s7.py
2 gg
3 bfmq
4 <class '__main__.A'>
5 
6 Process finished with exit code 0

属性(这个太坑了,就是去掉了个(),感觉根本没有什么卵用啊)

私有字段:在字段前面加两个下划线“__”就可以让此字段只接受内部访问(继承也不行哦)。如果在不得已的情况下,你可以_类名__私有字段.....(不过你还是忘了他吧)

 1 #!/usr/bin/env python
 2 class A:
 3     def __init__(self, name):
 4         self.__name= name
 5 
 6     def show(self):
 7         print(self.__name)
 8 
 9 obj = A('bfmq')
10 print(obj.__name)                          #这样就跪了
11 obj.show()   
1 C:UsersAdministratorAppDataLocalProgramsPythonPython35python.exe C:/Users/Administrator/PycharmProjects/ACE/study8/s7.py
2 Traceback (most recent call last):
3   File "C:/Users/Administrator/PycharmProjects/ACE/study8/s7.py", line 10, in <module>
4     print(obj.__name)                          #这样就跪了
5 AttributeError: 'A' object has no attribute '__name'
6 
7 Process finished with exit code 1
1 C:UsersAdministratorAppDataLocalProgramsPythonPython35python.exe C:/Users/Administrator/PycharmProjects/ACE/study8/s7.py
2 bfmq
3 
4 Process finished with exit code 0

有序字典

 1 #!/usr/bin/env python
 2 class MyDict(dict):
 3     def __init__(self):
 4         self.li = []
 5         super(MyDict, self).__init__()
 6 
 7     def __setitem__(self, key, value):
 8         self.li.append(key)
 9         super(MyDict, self).__setitem__(key, value)
10 
11     def __str__(self):
12         temp_list = []
13         for key in self.li:
14             value = self.get(key)
15             temp_list.append("'%s':'%s'" % (key, value))
16         temp_str = '{' + ','.join(temp_list) + '}'
17         return temp_str
18 
19 obj = MyDict()
20 obj['k1'] = 123
21 obj['k2'] = 456
22 print(obj)
原文地址:https://www.cnblogs.com/bfmq/p/5864869.html